精华内容
下载资源
问答
  • vue 鼠标拖动

    2019-10-09 00:30:17
    Vue.directive( " drag " ,(el,{modifiers,value})=> { el.style.position = " absolute " ; let {x,y} = modifiers; el.addEventListener( " mousedown " ,donw); var disX,disY; function donw(e...
    <!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>
            *{margin:0;padding: 0}
            .box{
                width: 100px;
                height: 100px;
                background: red;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <div class="box" v-drag="flag">
                
            </div>
    
    
          
           
        </div>
    
    
        <div data-id="0"  id="box"></div>
    </body>
    </html>
    <script src="./vue.js"></script>
    <script>
        Vue.directive("drag",(el,{modifiers,value})=>{
            el.style.position = "absolute";
            let {x,y} = modifiers;
           
    
            el.addEventListener("mousedown",donw);
            
            var disX,disY;
            function donw(e){
                disX = e.offsetX;
                disY = e.offsetY;
                document.addEventListener("mousemove",move);
                document.addEventListener("mouseup",up)
    
    
            }
    
            function move(e){
               var l = e.clientX - disX;
               var t = e.clientY - disY;
    
    
                if(value){
    
                    if(x){
                        el.style.left = l + 'px';
                    }
                    if(y){
                        el.style.top = t + 'px';
                    }
                    
                    if(x&&y || (!x&&!y)){
                        el.style.left = l + 'px';
                        el.style.top = t + 'px';
                    }
                     
                }
               
            }
    
            function up(e){
                document.removeEventListener("mousemove",move);
                document.removeEventListener("mouseup",up);
            }
        })
    
    
    
        new Vue({
            el:"#app",
            data:{
                flag:true,
                msg:"123"
            }
        })
    </script>

     

    转载于:https://www.cnblogs.com/tangyuqi/p/11285249.html

    展开全文
  • Vue鼠标点击事件失效解决方法

    千次阅读 2020-06-01 16:47:48
    再electron和vue开发的桌面应用中,为应用添加了一个拖动功能后,再拖动内部所有的鼠标事件失效,无法触发 解决: 因为父级元素设置了样式: -webkit-app-region:drag,阻止了鼠标的点击事件,只需要再内部需要点击...

    问题:
    再electron和vue开发的桌面应用中,为应用添加了一个拖动功能后,再拖动内部所有的鼠标事件失效,无法触发
    解决:
    因为父级元素设置了样式: -webkit-app-region:drag,阻止了鼠标的点击事件,只需要再内部需要点击的部门添加一个 样式:-webkit-app-region:no-drag,这样子就可以解决了
    优化:再这边点击会出现在一个黄色的框框,可以加样式outline: none 解决

    展开全文
  • vue jq实现鼠标拖动

    2018-12-18 14:58:30
    //获取鼠标按下的时候左侧偏移量和上侧偏移量 var old_left = $(this).offset().left;//距离页面左边的距离 var old_top = $(this).offset().top;//距离页面顶边的距离 // console.log(old_left,old_top) //...
    <template>
        <div class="icontent">
            <div class="my-gaofen-tab-content">
            <div class="my-gaofen-tab">
                <ul id="pic">
                    <li @click="itabclick($event)" myAttr="2014">
                        2014年精彩回顾
                    </li>
                    <li @click="itabclick($event)" myAttr="2015">
                        2015年精彩回顾
                    </li>
                    <li @click="itabclick($event)" myAttr="2016">
                        2016年精彩回顾
                    </li>
                    <li @click="itabclick($event)" myAttr="2017">
                        2017年精彩回顾
                    </li>
                    <li @click="itabclick($event)" myAttr="2018">
                        2018年精彩回顾
                    </li>
                    <li @click="itabclick($event)" myAttr="2018">
                        2019年精彩回顾
                    </li>
                    <li @click="itabclick($event)" myAttr="2018">
                        2020年精彩回顾
                    </li>
                </ul>
            </div>
            </div>
        </div>
    </template>
    
    <script>
        import $ from 'jquery'
        $(function () {
            var $box = $("#pic")
            $box.mousedown(function (event) {
                //获取鼠标按下的时候左侧偏移量和上侧偏移量
                var old_left = $(this).offset().left;//距离页面左边的距离
                var old_top = $(this).offset().top;//距离页面顶边的距离
                // console.log(old_left,old_top)
    
                //获取鼠标的位置
                var old_position_left = event.originalEvent.x;
                var old_position_top = event.originalEvent.y;
                console.log("初始位置:",old_position_left,old_position_top)
                var width =  document.getElementById("pic").scrollWidth
                var f_w = $('.my-gaofen-tab').width()
                console.log('ul宽度:',width)
                console.log('div宽度:',f_w)
                console.log('ul与div差距:',width - f_w)
                var before_change = Number($box.css("left").slice(0,-2))
                console.log('改变之前:',before_change)
                $box.mousemove(function (event) {
                    var new_position_left = event.originalEvent.x;
                    var new_position_top = event.originalEvent.y;
                    var change_x = old_position_left - new_position_left
                    console.log('鼠标移动变化值:',change_x)
                    var mar_left =  $box.css("left")
                    if(Number(mar_left.slice(0,-2)) <= 0 && Number(mar_left.slice(0,-2)) >= -(width - f_w)) {
                        if(change_x >= 0) {
                            console.log(Number($box.css("left").slice(0,-2)))
                            if(before_change < 0) {
                                var need_change = before_change - change_x
                                console.log("xx:",need_change)
                                $box.css({left: String(need_change) + 'px'})
                            } else {
                                $box.css({left: '-' + String(change_x) + 'px'})
                            }
                        }else if(change_x < 0){
                            console.log(before_change)
                            if(before_change < 0) {
                                if(Number(mar_left.slice(0,-2)) < 0) {
                                    console.log("进入")
                                    var abs_change = Math.abs(change_x)
                                    var new_change = before_change + abs_change
                                    $box.css({left: String(new_change) + 'px'})
                                }
                            }
                        }
                    }
                    if(Number(mar_left.slice(0,-2)) < -(width - f_w)) {
                        if(change_x < 0){
                            console.log(before_change)
                            if(before_change < 0) {
                                if(Number(mar_left.slice(0,-2)) < 0) {
                                    console.log("进入")
                                    var abs_change = Math.abs(change_x)
                                    var new_change = before_change + abs_change
                                    $box.css({left: String(new_change) + 'px'})
                                }
                            }
                        }
                    }
                    if(Number(mar_left.slice(0,-2)) > 0){
                        if(change_x >= 0) {
                            console.log(Number($box.css("left").slice(0,-2)))
                            if(before_change < 0) {
                                var need_change = before_change - change_x
                                console.log("xx:",need_change)
                                $box.css({left: String(need_change) + 'px'})
                            } else {
                                $box.css({left: '-' + String(change_x) + 'px'})
                            }
                        }
                    }
                })
                $(document).mouseup(function(){
                    $box.off("mousemove");
                })
            })
    
        });
        export default {
            name: "forum",
            data () {
                return {
                    msg: 'forum'
                }
            },
            methods: {
                itabclick(e) {
                    var eventdom = e.target
                    var all_div = eventdom.parentElement.children
                    var all_len = $(all_div).length
                    this.dongtai_title = $(eventdom).text()
                    for(var i=0;i<all_len;i++){
                        $(all_div[i]).removeClass('my-xuanzhong')
                    }
                    $(eventdom).addClass('my-xuanzhong')
                },
            },
            created: function() {
            }
        }
    </script>
    
    <style scoped>
        .icontent{
            overflow: hidden;
            width: 100%;
        }
        .my-gaofen-tab-content{
            margin: 50px 0 0 0;
            height: 60px;
            background:rgba(9,65,167,1);
            width: 100%;
        }
        .my-gaofen-tab{
            margin: 34px calc(50% - 550px) auto calc(50% - 550px);
            width: 1100px;
            height: 60px;
            -webkit-user-select:none;
            -moz-user-select:none;
            -ms-user-select:none;
            user-select:none;
            overflow: hidden;
            position: relative;
            background:rgba(9,65,167,1);
        }
        .my-gaofen-tab ul{
            width: auto;
            list-style: none;
            padding: 0;
            margin: 0;
            overflow: hidden;
            white-space: nowrap;
            position: absolute;
            left: 0;
            top: 0;
            /* overflow-x: scroll; */
            /* display: inline-block; */
        }
        .my-gaofen-tab ul::-webkit-scrollbar {
            display: none;
        }
        .my-gaofen-tab ul li:hover{
            cursor: pointer;
        }
        .my-gaofen-tab ul li{
            width:204px;
            text-align: center;
            display: inline-block;
            height: 60px;
            padding: 0 6px 0 6px;
            text-align: center;
            color: #AAAAAA;
            line-height: 60px;
            font-size:18px;
            font-family:PingFangSC-Regular;
            font-weight:400;
            color: white;
        }
        .my-xuanzhong{
            color:rgba(9,65,167,1) !important;
            background:rgba(255,204,102,1);
        }
    </style>
    
    展开全文
  • PC的鼠标拖动事件 移动端的手指事件 能拿到被移动元素的高宽,距离可移动范围内的距离 拖动事件与手指事件 顾名思义,就是通过不同的触发条件来达到你想实现的拖动效果,至于第三条的可移动范围,可以是 父级dom 的...

    写了好几次的PC端和移动端的拖拽效果了,每次都要重新查阅资料,现在做个总结记录,方便以后随时查阅

    要想写拖拽事件,首先得了解三块知识点:

    • PC的鼠标拖动事件
    • 移动端的手指事件
    • 能拿到被移动元素的高宽,距离可移动范围内的距离

    拖动事件与手指事件 顾名思义,就是通过不同的触发条件来达到你想实现的拖动效果,至于第三条的可移动范围,可以是 父级dom 的宽高,也可以是 可见的视口宽高,具体根据自己的需求定制,下面会提供对应获取方法

    PC端的拖拽事件

    直说几个常用的,有兴趣可以去查阅所有 mouse 事件
    如果是在框架内,比如 vue 中,可以直接使用 @+方法 即可调用(手指事件同理)
    比如 @mousedown=“xxx”

    mousedown:按下鼠标后触发
    mouseup:	松开鼠标后触发
    mousemove:移动鼠标时触发
    mouseout:当鼠标离开当前对象时触发
    

    移动端的手指事件

    直说几个常用的,有兴趣可以去查阅所有 touch事件

    vue 可以使用 @touchmove.prevent.top 触发手指事件

    touchstart:触摸开始(手指放在触摸屏上)
    touchmove:拖动(手指在触摸屏上移动)
    touchend:触摸结束(手指从触摸屏上移开)
    touchenter :移动的手指进入一个dom元素
    touchleave :移动的手指离开一个dom元素
    

    拿到被移动元素的高宽,距离可移动范围内的距离

    视口高宽

    先说说常用的视口高宽,因为每个浏览器都有自己的内核,所以需要考虑一定的兼容

    **在IE中:**
    document.body.clientWidth ==> BODY对象宽度
    document.body.clientHeight ==> BODY对象高度
    document.documentElement.clientWidth ==> 可见区域宽度
    document.documentElement.clientHeight ==> 可见区域高度
    document.documentElement.scrollTop =>窗口滚动条滚动高度
    **在FireFox中:**
    document.body.clientWidth ==> BODY对象宽度
    document.body.clientHeight ==> BODY对象高度
    document.documentElement.clientWidth ==> 可见区域宽度
    document.documentElement.clientHeight ==> 可见区域高度
    document.documentElement.scrollTop =>窗口滚动条滚动高度
    **在chrome中:**
    document.body.clientWidth ==> BODY对象宽度
    document.body.clientHeight ==> BODY对象高度
    document.documentElement.clientWidth ==> 可见区域宽度
    document.documentElement.clientHeight ==> 可见区域高度
    document.body.scrollTop =>窗口滚动条滚动高度
    **在Opera中:**
    document.body.clientWidth ==> 可见区域宽度
    document.body.clientHeight ==> 可见区域高度
    document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)
    document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高
    

    提供一段常用代码(获取视口高 宽)

    let windowHeight =
        document.documentElement.clientHeight ||
        document.documentElement.clientHeight ||
        document.documentElement.clientHeight ||
        document.documentElement.clientHeight;
    let windowWidth =
        document.documentElement.clientWidth ||
        document.documentElement.clientWidth ||
        document.documentElement.clientWidth ||
        document.documentElement.clientWidth;
    

    获取鼠标/手指移动的距离

    可以通过 listener 获取到 event 来获取鼠标/手指移动距离

    document.addEventListener(
      "touchmove",
       (event) => {
            event.;
    		event.touches[0].clientY;
       },
       false
    );
    

    获取 dom 的宽高

    如果移动范围是针对父级元素的而不是视口的,同样可以通过获取父级元素的宽高来限制移动范围

    let movePj = document.querySelector("xxx");
    movePj.offsetHeight;
    movePj.offsetWidth;
    

    获取 dom 距离上下左右的距离

    该方法获取的是距离视口的相对距离,如果要获取父级的相对距离就要自己计算了

    let movePj = document.querySelector("xxx");
    movePj .getBoundingClientRect().top;
    movePj .getBoundingClientRect().bottom;
    movePj .getBoundingClientRect().left;
    movePj .getBoundingClientRect().right;
    

    移动 dom

    最后就是我们的移动 dom 了,可以通过 transform 来实现
    例如:

    xxxxxxx
    xxx
    在计算结束以后我们需要移动我们的 dom元素 menu 需要横向移动 moveDistance(计算结果)那么可以这样写
    menu.style.transform = `translateX(${moveDistance}px)`;
    
    展开全文
  • 主要介绍了vue+mousemove实现鼠标拖动功能,文中给大家介绍了鼠标移动过快拖动就失效问题的解决方法,需要的朋友可以参考下
  • vue移动端拖动排序

    2021-06-15 16:24:44
    我们移动端排序,如果使用drag拖动事件会有重影,在移动端会显得不是很友好,还是需要控制dom的位置去实现。效果自己复制代码运行就可以看到效果; 一、直接上代码 <template> <div class="old_sort_main...
  • vue写法非常的卡顿 <div v-for="(item, i) in cardList" :key="item" :ref="'box' + (i + 1)" :class="'card card' + item" @mousedown="down($event, i + 1)" @mousemove="move($event, i + 1)
  • vue监听鼠标滚动事件

    万次阅读 2019-06-17 15:04:19
    <script> export default { name: "home", data(){ return{ currentId:1, } }, methods:{ //切换栏目 cha...
  • vue拖动鼠标阻止文本被选 描述:pc端,拖动悬浮按钮,页面文本会随着悬浮按钮的拖动出现被选,虽然没什么影响,但是很影响用户体验。 如图:(图字是左侧,博主左右不分) 修复 onmousemove(e){ let et= e || ...
  • vue实现拖动div

    千次阅读 2019-07-18 15:11:37
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title>...script type="text/javascript" src="./js/vue.min.js"></scri...
  • vue 拖拽指令 v拖曳 (v-dragged) ... Vue 2.x指令插件,用于拖动事件检测。 View demo 查看演示 Download Source 下载源 安装 (Install) npm install --save v-dragged import Vue from 'vue'...
  • 鼠标拖动图片(完整代码在最后) 预览: 层级关系主要是: 最外层控制整个区域大小的盒子(mapbox) 中间层用来包裹图片的table(使用 td 才可以使用百分比控制图片大小) 最内层图片本体 <template> ;height:'+...
  • <template> <div id="app"> <div v-drag class="drag"></div> </div> </template> <script> export default { name: 'App', directives:{ ... var d
  • 今天用vue+原生js的mousemove事件,写了个拖动,发现只能慢慢拖动才行,鼠标只要移动快了,就失效,不能拖动了;搞了半天在,总算解决了,但是问题的深层原理还没搞清楚,知道的大侠可以留言分享,下面直接上代码:...
  • vue中的鼠标移动事件

    千次阅读 2020-06-27 08:47:29
    vue鼠标移动事件 项目需求要在首页判断鼠标是否移动到页面最右边,然后浮现两个可操作的图标; 第一想法就是: @ mousemove:鼠标移动时触发 试了一下果然可以; offsetX / clientX / pageX / screenX 的区别 其中的...
  • vue实现拖动元素

    2021-03-29 14:46:06
    拖动元素要加 v-drag <div v-drag >{{ fromData.text }}</div> directives: { drag: function(el) { let dragBox = el; dragBox.onmousedown = e => { //算出鼠标相对元素的位置 let disX =...
  • 拖动缓慢方法 DOM层 <div @mousedown="mousedown($event)" @mousemove='mousemove($event)' @mouseup='mouseup( $event)' > </div> 逻辑层 methods: { mousedown: function (event) { ...
  • 1、在main.js同级目录下新建 directives.js文件 ...import Vue from 'vue' // v-dialogDrag: 弹窗拖拽 Vue.directive vue自定义指令 Vue.directive('dialogDrag', { bind(el, binding, vnode, oldVnode) { // ...
  • vue 实现拖动元素

    2020-10-26 15:25:38
    document.onmousemove = e => { //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置 let left = e.clientX - disX; let top = e.clientY - disY; let resW = parentW - moveW;//父盒子宽减去移动盒子的宽 = ...
  • 注意:该伪指令侦听鼠标/触摸事件,并为何时拖动事件检测到拖动actio v拖动Vue伪指令插件设置处理程序。 注意:此伪指令侦听鼠标/触摸事件,并设置检测到拖动动作时的处理程序。 这与在元素上设置可拖动元素不同,...
  • 子组件中使用,请添加修饰符.native 如: @dblclick.native @click.native 通俗点讲:.native将vue子组件变成了普通的HTML标签!该修饰符对普通HTML标签是没有任何作用
  • vue 结合 fabric.js 用canvas画布画底图 实现鼠标拖动画布底图 实现鼠标滚动对画布底图进行放大缩小 2. 引入 fabric.js 2.1 npm 安装 npm install fabric --save 2.2 main.js 导入 import { fabric } from '...
  • 1.在util文件夹下新建directive.js文件 import Vue from 'vue' // 自定义指令的格式,名字 Vue.directive('drag', { bind (el) { let dragBox = el // 获取当前元素 ... // 算出鼠标相对元素的位置 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,759
精华内容 1,103
关键字:

vue鼠标拖动事件

vue 订阅