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 相关文章推荐
js实现的日期操作类DateTime函数代码
Mar 16 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
Mar 29 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
Aug 01 Javascript
JavaScript基础函数整理汇总
Jan 30 Javascript
jQuery实现根据生日计算年龄 星座 生肖
Nov 23 Javascript
微信小程序 radio单选框组件详解及实例代码
Jan 10 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
微信小程序实现无限滚动列表
May 29 Javascript
了解JavaScript中的选择器
May 24 Javascript
layer更改皮肤的实现方法
Sep 11 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
JavaScript实现省份城市的三级联动
Feb 11 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
JAVA程序员面试题
2012/10/03 面试题
事业单位接收函
2014/01/10 职场文书
致200米运动员广播稿
2014/02/06 职场文书
大学生见习总结报告
2015/06/24 职场文书
学生会部长竞选稿
2015/11/19 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js