Vue实现开关按钮拖拽效果

 更新时间:2020年09月22日 10:30:25   作者:WuHuiNing  
这篇文章主要为大家详细介绍了Vue实现开关按钮拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Vue实现开关按钮拖拽效果的具体代码,供大家参考,具体内容如下

css:

<style>
  .box {
    position: absolute;
    left: 100px;
    top: 100px;
    width: 100px;
    height: 100px;
    background: red;
  }
  .box2 {
    position: absolute;
    left: 400px;
    top: 100px;
    width: 100px;
    height: 100px;
    background: green;
  }
</style>

html:

<div id="app">

  <div class="box" v-drag="isDrag"></div>

  <div class="box2" v-drag:fn.limit.b="isDrag"></div>

  <button @click="isDrag = !isDrag">{{isDrag}}</button>

</div>

js:

<script src="vue.js"></script>
<script>

  // 组件
  Vue.directive('drag', {
    bind(el, {value, arg, modifiers}) {
      console.log(value, arg, modifiers)
      el._value = value;
      el._isDrag = false;
      el.addEventListener('mousedown', function(e) {

        if (!el._value) return;

        el._isDrag = true;
        el._x = e.clientX - el.offsetLeft;
        el._y = e.clientY - el.offsetTop;

        e.preventDefault();
      });
      document.addEventListener('mousemove', function(e) {
        if (el._isDrag) {
          let l = e.clientX - el._x;
          let t = e.clientY - el._y;

          if (modifiers.limit) {
            if (l < 0) {
              l = 0;
            }
            if (t < 0) {
              t = 0;
            }
          }

          el.style.left = l + 'px';
          el.style.top = t + 'px';
        }
      });
      document.addEventListener('mouseup', function(e) {
        el._isDrag = false;
      });
    },

    componentUpdated(el, {value}) {
      console.log('更新了', value);
      el._value = value;
    }
  });

  let app = new Vue({
    el: '#app',
    data: {
      isDrag: false
    }
  });


</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • vue iview实现动态新增和删除

    vue iview实现动态新增和删除

    这篇文章主要为大家详细介绍了vue iview实现动态新增和删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 详解Vue中表单组件的双向数据绑定

    详解Vue中表单组件的双向数据绑定

    Vue 提供了双向数据绑定机制,使得开发者可以轻松地将表单组件的值与 Vue 实例中的数据进行关联,本文将详细介绍如何在 Vue 中使用这些表单组件,并实现双向数据绑定,需要的可以参考下
    2024-03-03
  • vue3项目vite.config.js配置代理、端口、打包名以及图片压缩

    vue3项目vite.config.js配置代理、端口、打包名以及图片压缩

    这篇文章主要给大家介绍了关于vue3项目vite.config.js配置代理、端口、打包名以及图片压缩的相关资料,因为3.0版本中vue已经内置了很多关于webpack的配置,一般情况下开箱即用,需要修改则可以在vue.config.js文件中完成,需要的朋友可以参考下
    2023-12-12
  • 浅析vue如何实现手机横屏功能

    浅析vue如何实现手机横屏功能

    在项目开发中有时候需求需要手动实现横屏功能,所以这篇文章主要为大家详细介绍了如何使用Vue实现手机横屏功能,需要的小伙伴可以参考一下
    2024-03-03
  • vue插值表达式和v-text指令的区别

    vue插值表达式和v-text指令的区别

    这篇文章主要介绍了vue插值表达式和v-text指令的区别,{{}}这种语法叫做插值表达式,在插值表达式中可以写任何合法的js表达式,下面来看看文章是怎么介绍该内容的吧,需要的朋友可以参考一下
    2021-11-11
  • element ui 表格动态列显示空白bug 修复方法

    element ui 表格动态列显示空白bug 修复方法

    今天小编就为大家分享一篇element ui 表格动态列显示空白bug 修复方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 详解element-ui表格中勾选checkbox,高亮当前行

    详解element-ui表格中勾选checkbox,高亮当前行

    这篇文章主要介绍了详解element-ui表格中勾选checkbox,高亮当前行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 八种vue实现组建通信的方式

    八种vue实现组建通信的方式

    这篇文章主要介绍是八种vue实现组建通信的方式,包括、props 父组件与子组件通信、$emit 子组件父组件传递、$emit与props结合 兄弟组件传值等等,想具体了解的朋友可以参考下面文章的具体内容
    2021-09-09
  • vue使用element实现上传图片和修改图片功能

    vue使用element实现上传图片和修改图片功能

    前几天做到一个关于图片上传功能,下面这篇文章主要给大家介绍了关于vue使用element实现上传图片和修改图片功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • vue+element实现动态加载表单

    vue+element实现动态加载表单

    这篇文章主要为大家详细介绍了vue+element实现动态加载表单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12

最新评论