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 相关文章推荐
JavaScript实现统计文本框Textarea字数增强用户体验
Dec 21 Javascript
判断日期是否能跨月查询的js代码
Jul 25 Javascript
js的touch事件的实际引用
Oct 13 Javascript
jquery实现简单的无缝滚动
Apr 15 Javascript
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
去除html代码里面的script正则方法
May 19 Javascript
js实现各种复制到剪贴板的方法(分享)
Oct 27 Javascript
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 Javascript
微信小程序系列之自定义顶部导航功能
May 21 Javascript
vue中input的v-model清空操作
Sep 06 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 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 中文处理技巧
2010/04/25 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python探索之SocketServer详解
2017/10/28 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
软件测试面试题
2015/10/21 面试题
生产班组长岗位职责
2014/01/05 职场文书
英文演讲稿开场白
2014/08/25 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL
什么是css原子化,有什么用?
2022/04/24 HTML / CSS