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教程
Jun 09 Javascript
javascript 写类方式之七
Jul 05 Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
Oct 12 Javascript
jQuery动态添加、删除元素的方法
Jan 09 Javascript
innerText 使用示例
Jan 23 Javascript
jquery插件推荐 jquery.cookie
Nov 09 Javascript
jQuery中[attribute^=value]选择器用法实例
Dec 31 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
easyUI下拉列表点击事件使用方法
May 18 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
p5.js实现简单货车运动动画
Oct 23 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 array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
jQuery select控制插件
2009/08/17 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
2017/07/04 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python定位xpath 节点位置的方法
2019/08/27 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
python和php学习哪个更有发展
2020/06/17 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
北京天润融通.net面试题笔试题
2012/02/20 面试题
酒店led欢迎词
2014/01/09 职场文书
化妆品店促销方案
2014/02/24 职场文书
个人承诺书格式
2014/06/03 职场文书
开会通知短信大全
2015/04/20 职场文书
详解python字符串驻留技术
2021/05/21 Python
Go语言基础知识点介绍
2021/07/04 Golang