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的ajax()函数传值中文乱码解决方法介绍
Nov 08 Javascript
firefox浏览器不支持innerText的解决方法
Aug 07 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
js与jquery回车提交的方法
Feb 03 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
May 10 Javascript
JS匹配日期和时间的正则表达式示例
May 12 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
js prototype和__proto__的关系是什么
Aug 23 Javascript
深入了解JavaScript 防抖和节流
Sep 12 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 Javascript
五句话帮你轻松搞定js原型链
Dec 09 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
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
Python open()文件处理使用介绍
2014/11/30 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Django 内置权限扩展案例详解
2019/03/04 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
python批量处理文件或文件夹
2020/07/28 Python
python 并发下载器实现方法示例
2019/11/22 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
文秘自荐信
2013/10/20 职场文书
中专毕业生自荐信
2013/11/16 职场文书
小学教师办公室制度
2014/02/03 职场文书
逃课上网检讨书
2014/02/20 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
商场父亲节活动方案
2014/08/27 职场文书
诚实守信演讲稿
2014/09/01 职场文书
升职自荐信范文
2015/03/27 职场文书
如何写新闻稿
2015/07/18 职场文书
《刷子李》教学反思
2016/02/20 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL