VUE实现可随意拖动的弹窗组件


Posted in Javascript onSeptember 25, 2018

背景:项目需要,我们引入了前端框架就是目前最流行的框架之一vue,同时引入了一套由饿了吗维护的ui库,由于我们是在pc端使用发现它竟然没有提供可随意拖动的窗口,可能用的更多的时移动端吧吧,于是就随手写了一个,比较简单吧,但是做过的就会知道也是有一些小小的技巧,记录下吧留作备用。

由于不是很难,就不做过多解释了,直接上代码:

<template>
 <el-container v-bind:id="id"
        v-if="dialogVisible">
  <el-header>
   <div @mousedown="mousedown">
    <h2 v-html="title"></h2>
    <div @click.stop="closeDialog()" style="position: absolute;top: 0px; right: 20px;">
    <span>
     <svg class="icon" aria-hidden="false">
      <use xlink:href='#el-icon-ext-close'></use>
     </svg>
    </span>
    </div>
   </div>
  </el-header>
  <el-main>
   <slot>这里是内容</slot>
  </el-main>
  <el-footer>
   <span class="dialog-footer">
    <el-button @click="closeDialog">取 消</el-button>
    <el-button type="primary" @click="closeDialog">确 定</el-button>
   </span>
  </el-footer>
 </el-container>
</template>

<script>
 export default {
  name: 'Window',
  props: {
   titlex: String,
   id: [String, Number]
  },
  data() {
   return {
    title: '标题',
    selectElement: ''
   }
  },
  computed: {
   dialogVisible: {
    get: function () {
     return this.$store.state.dialogVisible
    },
    set: function (newValue) {
     this.$store.commit('newDialogVisible', newValue)
    }
   }
  },
  methods: {
   closeDialog(e) {
    this.dialogVisible = false
    // alert(this.dialogVisible)
    this.$store.commit('newDialogVisible', false)
   },
   mousedown(event) {
    this.selectElement = document.getElementById(this.id)
    var div1 = this.selectElement
    this.selectElement.style.cursor = 'move'
    this.isDowm = true
    var distanceX = event.clientX - this.selectElement.offsetLeft
    var distanceY = event.clientY - this.selectElement.offsetTop
    // alert(distanceX)
    // alert(distanceY)
    console.log(distanceX)
    console.log(distanceY)
    document.onmousemove = function (ev) {
     var oevent = ev || event
     div1.style.left = oevent.clientX - distanceX + 'px'
     div1.style.top = oevent.clientY - distanceY + 'px'
    }
    document.onmouseup = function () {
     document.onmousemove = null
     document.onmouseup = null
     div1.style.cursor = 'default'
    }
   }
  }
 }
</script>

<style scoped>
 .el-container {
  position: absolute;
  height: 500px;
  width: 500px;
  border: 1px;
  top: 20%;
  left: 35%;
  border-radius: 2px;
 }

 .dialog-footer {
  text-align: right;
 }

 .el-main {
  background-color: white;
 }

 .el-footer {
  background-color: white;
 }

 .el-header {
  background-color: white;
  color: #333;
  line-height: 60px;
 }

 .el-aside {
  color: #333;
 }
</style>

备注:解决了鼠标拖动过快移除窗口后终端问题,其它优点请自测,如有问题请留言!

以上这篇VUE实现可随意拖动的弹窗组件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
添加到收藏夹代码(兼容几乎所有的浏览器)
Jan 09 Javascript
UI Events 用户界面事件
Jun 27 Javascript
jquery实现简单易懂的图片展示小例子
Nov 21 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
javascript jquery对form元素的常见操作详解
Jun 12 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
jQuery用noConflict代替$的实现方法
Apr 12 jQuery
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
Vue实现简单计算器案例
Feb 25 Javascript
vue 子组件watch监听不到prop的解决
Aug 09 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 Javascript
vue移动端弹框组件的实例
Sep 25 #Javascript
JavaScript常用数组操作方法,包含ES6方法
May 10 #Javascript
在vue项目中,将juery设置为全局变量的方法
Sep 25 #Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
Sep 25 #Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 #Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
Sep 25 #Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 #Javascript
You might like
PHP生成word文档的三种实现方式
2016/11/14 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
PHP7新特性
2021/03/09 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
js轮播图代码分享
2016/07/14 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
python django 实现验证码的功能实例代码
2017/05/18 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
销售总监工作职责
2013/11/21 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
Java Spring读取和存储详细操作
2022/08/05 Java/Android