美文网首页
vue 悬浮可拖拽组件--可在屏幕上进行拖拽

vue 悬浮可拖拽组件--可在屏幕上进行拖拽

作者: 七號7777 | 来源:发表于2020-07-09 15:50 被阅读0次

效果图


image.png
// 悬浮按钮组件
<template>
  <div style="position:relative;">
    <div class="button-box" v-drag draggable="false">
      <div class="btn-bg-img" @dblclick="openBox"></div>
      <div class="font-box">{{ text }}</div>
    </div>
  </div>
</template>

<script>
export default {
  components: {caseInfo},
  props: ['caseID'],
  data () {
    return {
      text: '双击显示案件详情',
      isOpen: false,
      isMove: false
    }
  },
  methods: {
    openBox () {
      console.log('双击')
    },
    mousedowm (e) { // 鼠标按下时的鼠标所在的X,Y坐标
      this.mouseDownX = e.pageX
      this.mouseDownY = e.pageY
      // 初始位置的X,Y 坐标
      // this.initX = obj.offsetLeft;
      // this.initY = obj.offsetTop;
      console.log('e', e)
      // 表示鼠标已按下
      this.flag = true
    },
    mousemove (e) {
      if (this.flag) {
        console.log('e :', e)
      }
    }
  },
  directives: {
    drag (el) {
      let oDiv = el // 当前元素
      // let self = this // 上下文
      // 禁止选择网页上的文字
      document.onselectstart = function () {
        return false
      }
      oDiv.onmousedown = function (e) {
        // 鼠标按下,计算当前元素距离可视区的距离
        let disX = e.clientX - oDiv.offsetLeft
        let disY = e.clientY - oDiv.offsetTop
        document.onmousemove = function (e) {
          // 通过事件委托,计算移动的距离
          let l = e.clientX - disX
          let t = e.clientY - disY
          // 移动当前元素
          oDiv.style.left = l + 'px'
          oDiv.style.top = t + 'px'
        }
        document.onmouseup = function (e) {
          document.onmousemove = null
          document.onmouseup = null
        }
        // return false不加的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效
        return false
      }
    }
  }
}
</script>

<style scoped>
.button-box {
  width: 80px;
  border-radius: 50%;
  position: fixed;
  bottom: 80px;
  right: 50px;
  padding-left: 15px;
  padding-top: 8px;
  cursor: pointer;
  opacity: 0.7;
  z-index: 888;
}
.btn-bg-img {
  width: 80px;
  height: 80px;
  background-image: url('../../../static/images/click.png');
  background-size: cover;
}
.button-box:hover {
  color: white;
  opacity: 1;
}

.font-box {
  width: 80px;
  color: #3193ef;
  text-align: center;
}
</style>

相关文章

  • vue 悬浮可拖拽组件--可在屏幕上进行拖拽

    效果图

  • VUE 封装拖拽组件

    vue 拖拽组件封装,组件代码如下 使用方式:

  • 上传组件

    记录一个可拖拽,重传,删除的上传组件 import-data.vue upload-item.vue abbrev...

  • vue拖拽组件

    Vue 拖拽组件 vuedraggable 和 vue-dragging 一、描述 知道 vue 肯定是有组件存在...

  • Vue 可拖拽的组件

    好久没更新了,最近写了一个小的拖拽组件,分享一下场景:h5项目上要有一个联系客服或查看相关问题的模块,一般定位在页...

  • Vue.Draggable学习总结

    Draggable为基于Sortable.js的vue组件,用以实现拖拽功能。 特性 支持触摸设备支持拖拽和选择文...

  • Vue拖拽悬浮按钮

    背景:最近做的页面原本有一个点赞悬浮按钮,但是在不同分辨率的移动设备屏幕上,后边的文字显示位置不固定,有的会被悬浮...

  • 可拖拽组件

  • 可拖拽排序的vue组件

    最近在优化一个vue的博客系统,想实现文章列表处的文章拖拽功能。就试了一下awe-dnd vue插件,觉得还挺好用...

  • vue-组件可拖拽案例

    涉及到的知识 事件方法dragstart,dragenter,dragend 事件对象e的属性值获取 $refs对...

网友评论

      本文标题:vue 悬浮可拖拽组件--可在屏幕上进行拖拽

      本文链接:https://www.haomeiwen.com/subject/rcrscktx.html