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 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
JS 添加千分位与去掉千分位的示例
Jul 11 Javascript
javascript快速排序算法详解
Sep 17 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
javascript 动态脚本添加的简单方法
Oct 11 Javascript
原生js+css实现tab切换功能
Sep 17 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 Javascript
原生JavaScript实现留言板
Jan 10 Javascript
JavaScript继承的三种方法实例
May 12 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
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
js活用事件触发对象动作
2008/08/10 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Django的性能优化实现解析
2019/07/30 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
信息系统专业个人求职信范文
2013/12/07 职场文书
超市营业员岗位职责
2013/12/20 职场文书
写自荐信要注意什么
2013/12/26 职场文书
中学教师读书笔记
2015/07/01 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server