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 相关文章推荐
jQuery EasyUI NumberBox(数字框)的用法
Jul 08 Javascript
JQuery写动态树示例代码
Jul 31 Javascript
JS中操作JSON总结
Dec 06 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
Feb 02 Javascript
详解JavaScript中循环控制语句的用法
Jun 03 Javascript
javascript冒泡排序小结
Apr 10 Javascript
JS对象与json字符串相互转换实现方法示例
Jun 14 Javascript
express + jwt + postMan验证实现持久化登录
Jun 05 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 Javascript
JS遍历树层级关系实现原理解析
Aug 31 Javascript
JavaScript 数组去重详解
Sep 15 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实现框架(二)
2006/10/09 PHP
收藏的一个php小偷的核心程序
2007/04/09 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
Python列表append和+的区别浅析
2015/02/02 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
python爬取指定微信公众号文章
2018/12/20 Python
详解python中@的用法
2019/03/27 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
什么是URL
2015/12/13 面试题
企业申诉管理制度
2014/01/30 职场文书
学生评语大全
2014/04/18 职场文书
企业承诺书格式
2014/05/21 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
实习指导老师意见
2015/06/04 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技