>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8235 个阅读者 刷新本主题
 * 贴子主题:  【Vue.js技术专题】自定义指令范例:v-drag指令 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2022-08-29 15:54:01     消息  查看  搜索  好友  邮件  复制  引用

本文参考孙卫琴,杜聚宾所创作的<<精通Vue.js: Web前端开发技术详解>>一书

本文介绍一个比较复杂的自定义指令v-drag,它支持用鼠标来拖曳网页上的特定DOM元素,参见例程1的v-drag.html。

例程1  v-drag.html
<html>
  <head>
    <meta charset="UTF-8">
    <title>Vue 范例 </title>
    <script src="vue.js"></script>
    <style>
      #app div{
        width: 100px;
        height: 100px;
        position:absolute;
      }
      #app .hello{
        background-color:yellow;
        top:0;
        left:0;
      }
      #app .world{
        background-color:pink;
        top:0;
        right:0;
      }
  </style>
</head>

<body>
  <div id="app">
    <div class="hello" v-drag>Hello</div>
    <div class="world" v-drag>World</div>
  </div>

   <script>
     const app=Vue.createApp({})

     app.directive('drag',(el)=>{
       //处理在当前DOM元素中点击鼠标的事件
       el.onmousedown=function(e){
         //获取鼠标点击处分别与div左边和上边的距离:,取值为:鼠标位置-div位置
         var disX=e.clientX-el.offsetLeft
         var disY=e.clientY-el.offsetTop
         console.log(disX,disY)

          //处理在整个网页区域中移动鼠标的事件
         document.onmousemove=function(e){
           //获取移动后div的位置,取值为:鼠标位置-disX/disY
           var l=e.clientX-disX
           var t=e.clientY-disY

           //重新设置DOM元素的位置,px是像素单位
           el.style.left=l+'px'      
           el.style.top=t+'px'
         }

         //处理在整个网页区域中,鼠标弹起,停止移动鼠标的事件
         document.onmouseup=function(e){
           document.onmousemove=null
           document.onmouseup=null
         }
       }
     })

     const vm=app.mount('#app')
  </script>

</body>
</html>

通过浏览器访问v-drag,html,会出现图1所示的网页。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
图1  v-drag.html的网页

在v-drag.html页面上有两个不同颜色的方框,分别对应两个<div>元素:

    <div class="hello" v-drag>Hello</div>
    <div class="world" v-drag>World</div>

用鼠标选中任意一个方框,在整个网页的区域内移动鼠标,方框就会随之移动,松开鼠标,方框就停止移动。





程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->集合(下)
  JavaWeb开发-->Web运作原理(Ⅰ)
  JSP与Hibernate开发-->立即检索和延迟检索策略
  Java网络编程-->RMI框架
  精通Spring-->计算属性和数据监听
  Vue3开发-->通过Axios访问服务器
  【Vue.js技术专题】Vue组件的数据监听
  【Vue.js技术专题】Vuex中异步操作
  【Spring Cloud Alibaba专题】Seata的架构
  【Java基础编程专题】使用和创建JavaDoc文档
  【Spring专题】Spring MVC是否过时?
  【持久化专题】JPA API的级联操作
  【持久化专题】通过JPA API调用存储过程
  【Java网络编程专题】用Apache FTPClient在FTP服务器上创建目...
  【Java网络编程专题】异步通道和异步运算结果
  【Java网络编程专题】用Java套接字编写基本的客户/服务器程序
  【JavaWeb专题】Tomcat与IIS集成详解
  《大话Java程序设计从入门到精通》写作花絮
  【Java基础编程专题】用内部类实现回调
  我的计算机书籍创作心得
  IT培训课、视频教程和书本之PK
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。