当前位置: 首页 > news >正文

vue ----自定义指令Vue.directive(),实现拖拽

 
Vue.directive("drag",(...rest)=>{
        //...rest展开对象
        console.log(rest);//第一个值为使用v-drag指令的当前元素,
        console.log(typeof rest);//object
    })
 
 
所以,设置第一个参数为当前的元素el(谁使用该指令,谁就是当前元素)
 
 
 
modifiers修饰符:不写,则为空,写则为a:true,b:true,,a,b为修饰符
 
value:值,并不是固定的,根据v-drag="值"来确定的
 
rewName:指令的全称
 
 
es6解构赋值
{modifier,value}获取了...rest中的modifier,value值

 

 

vue全局自定义指令实现拖拽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box{
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
        }
    </style>
</head>
<body>
    <div id="app">
    //y轴拖拽 <div class="box" v-drag.y="show"></div>
    //x轴拖拽 <div class="box" v-drag.x="show"></div> </div> </body> </html> <script src="vue.js"></script> <script> //全局自定义指令(必须在实例之前) /* 参数1:指令的名称 参数2:指令实现的函数 */ Vue.directive("drag",(el,{value,modifiers})=>{ //el代表使用该指令的元素 el.onmousedown = function(e){ //console.log("s"); var disx = e.offsetX ; var disy = e.offsetY; //阻止浏览器的默认事件 e.preventDefault(); document.onmousemove = function(e){ var x = e.clientX - disx; var y = e.clientY - disy; //如果表达式的结果是false,就不拖拽 if(!value){ return; }
          //修饰符
if(modifiers.x){ el.style.left = x + "px"; }
          //修饰符
if(modifiers.y){ el.style.top = y + "px"; } if(!(modifiers.x && !modifiers.y) && value){ el.style.left = x + "px"; el.style.top = y + "px"; } } document.onmouseup = function(){ document.onmousemove = null; document.onmouseup = null; } } }) var vm = new Vue({ el:"#app", data:{ show:true }, method:{ } }) </script>

 

转载于:https://www.cnblogs.com/SRH151219/p/10388750.html

相关文章:

  • Scalaz(14)- Monad:函数组合-Kleisli to Reader
  • 微软以白金会员加入 OpenChain 开源组织
  • 数学公式
  • 彻底搞懂浏览器Event-loop
  • jQuery插件 -- Cookie插件jquery.cookie.js(转)
  • Hbulider MUI
  • 快速有效的增加App真实评论的简单方法!
  • Spring Cloud 入门教程5、服务容错监控:Hystrix Dashboard
  • rabbitmq单机多实例集群搭建
  • j2EE监听器-listener
  • jQuery EasyUI使用教程之使用虚拟滚动视图显示海量数据
  • DevOps团队结构类型汇总:总有一款适合你
  • CSS学习笔记(五)背景
  • 独家!支付宝小程序技术架构全解析
  • linux关闭ssh连接
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Computed property XXX was assigned to but it has no setter
  • ECMAScript入门(七)--Module语法
  • Git 使用集
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • mysql innodb 索引使用指南
  • php中curl和soap方式请求服务超时问题
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python进阶细节
  • vue-router 实现分析
  • Webpack 4 学习01(基础配置)
  • 从输入URL到页面加载发生了什么
  • 对JS继承的一点思考
  • 前嗅ForeSpider中数据浏览界面介绍
  • 实习面试笔记
  • 算法-图和图算法
  • 详解移动APP与web APP的区别
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​力扣解法汇总946-验证栈序列
  • #每日一题合集#牛客JZ23-JZ33
  • #数学建模# 线性规划问题的Matlab求解
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)虚拟机的安装与使用,linux系统安装
  • (12)Hive调优——count distinct去重优化
  • (12)Linux 常见的三种进程状态
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (九)One-Wire总线-DS18B20
  • (三)docker:Dockerfile构建容器运行jar包
  • (十六)串口UART
  • (推荐)叮当——中文语音对话机器人
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net MVC4 上传大文件,并保存表单
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net6 webapi log4net完整配置使用流程
  • .NetCore部署微服务(二)