vue实现PC端标签拖动效果

news/2024/7/10 0:23:40 标签: vue, javascript, js

1.拖动需要监听鼠标按下、移动、抬起事件
2.一开始全部用methods绑定方法,后面发现用自定义指令directives比较方便,不用声明在data里声明变量,以及一个一个的绑定事件

<template>
  <div class="ad" v-drag>
    <el-badge :value="1" class="item">
      <i class="el-icon-chat-line-round icon"></i>
    </el-badge>
  </div>
</template>

<script>
export default {
  name: "AD",
  directives: {
    drag: {
      inserted(el) {
        let [x, y, l, t, isDown] = [0, 0, 0, 0, false];
        el.onmousedown = (e) => {
          //获取x坐标和y坐标
          x = e.clientX;
          y = e.clientY;
          //获取左部和顶部的偏移量
          l = el.offsetLeft;
          t = el.offsetTop;
          //开关打开
          isDown = true;
          //设置样式
          el.style.cursor = "move";
        };
        //鼠标移动
        el.onmousemove = (e) => {
          if (isDown == false) return;
          //获取x和y
          let [nx, ny] = [e.clientX, e.clientY];
          //计算移动后的左偏移量和顶部的偏移量
          let nl = nx - (x - l);
          let nt = ny - (y - t);
          el.style.left = nl + "px";
          el.style.top = nt + "px";
        };
        //鼠标抬起事件
        el.onmouseup = () => {
          //开关关闭
          isDown = false;
          el.style.cursor = "default";
        };
      },
    },
  },
};
</script>

<style>
.icon {
  font-size: 40px;
}
.ad {
  position: fixed;
  right: 20px;
  bottom: 30%;
  z-index: 9999999;
}
</style>

http://www.niftyadmin.cn/n/1367777.html

相关文章

vue 下载本地文件

<a :href${process.env.BASE_URL}竣工通v1.0操作手册.docx >操作帮助</a>1.文件我是放在public目录下的 2.如果你a标签加了download 属性&#xff0c;请保证名字和文件名一样否则无法下载&#xff01;&#xff01;

vue+element-ui 实现table单元格点击编辑,并且按上下键移动

1.接到需求是点击键盘上下键&#xff0c;控制输入框移动方便输入数据 2.相关实现代码 <el-table-column label"档距(m)" prop"span" width"120" align"center"><template slot-scope"scope"><el-input siz…

vue + element ui时 调用toggleRowSelection不生效

使用vuex存当前row&#xff0c;getters取row去其它组件回来时toggleRowSelection(row, true)不生效应该是函数return 取值形成了闭包&#xff0c;在操作页面遍历找到对应row&#xff0c;重新调用即可&#xff01; 主要代码 computed: {getHomePageRow () {return this.$store.…

js防抖节流

// 使用场景&#xff1a;防止狂点 function debounce(fn,delay500){// 使用vue的话, debounce.timer 换成 this.timer debounce.timer && clearTimeout(debounce.timer) ;debounce.timer setTimeout(()>{// fn....debounce.timer null},delay) }throttle (func, d…

js的this理解

function log () {console.log(this) } let obj {} obj.sonobj {son: } obj.log log obj.sonobj .log log obj.log() // {sonobj: {…}, log: ƒ} obj.sonobj .log() // {son: " ", log: ƒ}总结&#xff1a;谁直接调用this就是谁&#xff0c;不管它是不是在调用…

vue接入点聚weboffice打开在线文档报系统错误

运行官方的demo能正常打开线上文档放到vue打开就报错打开demo一行一行的排查解决bug:组件初始化需要调用一下weboffice.OptionFlag | 128; 相关代码&#xff1a; // weboffice 组件 <object ref"weboffice" :heightheight :widthwidth stylelet: 0px; top: 0px …

读书笔记:js中的null 和 undefined 的区别

1.在JS中 null和 undefined 都表示空&#xff0c;但它们还是存在一定区别的&#xff0c; null 表示不存在、没有&#xff0c;而 undefined 表示未定义。 2.底层实现时&#xff0c; null 一般会指向一个全 0 的地址&#xff0c;当 然&#xff0c;这个地址是无法访问的&#xff…

document的只读属性

1. domain&#xff1a; 当前文档的域名2. URL &#xff1a;当前文档 url3. referrer&#xff1a; 当前文档的前一个页面的url4. anchors&#xff1a; 当前文档的所有锚点&#xff08;a 标签&#xff09;5. forms &#xff1a;当前文档中的所有表单6. images &#xff1a;当前文…