IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue element el-dialog 自定义指令实现拖拽、双击全屏 -> 正文阅读

[JavaScript知识库]vue element el-dialog 自定义指令实现拖拽、双击全屏

Vue.directive('drag', {
    bind (el) {
      const header = el.querySelector('.el-dialog__header')
      const elDialog = el.querySelector('.el-dialog')
      let isFullScreen = false
      let originalHeight = 0
      let originalWidth = 0
      let originalLeft = 0
      let originalTop = 0
      let originalMarginTop = 0
      header.style.cursor = 'move'
      let mouseDown = (e) => {
        e.preventDefault()
        // 算出鼠标相对元素的位置
        let disX = e.clientX - elDialog.offsetLeft
        let disY = e.clientY - elDialog.offsetTop

        const elDialogWidth = elDialog.offsetWidth
        const elDialogHeight = elDialog.offsetHeight

        const screenWidth = document.body.clientWidth
        const screenHeight = document.body.clientHeight

        const maxLeft = screenWidth - elDialogWidth

        const maxTop = screenHeight - elDialogHeight

        el.onmousemove = (e) => {
          e.preventDefault()
          // 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
          let left = e.clientX - disX
          let top = e.clientY - disY

          // 边界检测
          if (left > maxLeft) {
            left = maxLeft
          } else if (-left > 0) {
            left = 0
          }

          if (top > maxTop) {
            top = maxTop
          } else if (-top > 0) {
            top = 0
          }

          // 移动当前元素
          elDialog.style.left = left + 'px'
          elDialog.style.top = top + 'px'
          elDialog.style.margin = 0
          elDialog.style.marginTop = 0
        }
        el.onmouseup = (e) => {
          e.preventDefault()
          el.onmousemove = null
          el.onmouseup = null
        }
      }
      header.onmousedown = mouseDown
      header.ondblclick = (e) => {
        if (!isFullScreen) {
          originalHeight = elDialog.clientHeight
          originalWidth = elDialog.clientWidth
          originalLeft = elDialog.style.left
          originalTop = elDialog.style.top
          originalMarginTop = elDialog.style.marginTop
          elDialog.style.height = '100vh'
          elDialog.style.width = '100vw'
          elDialog.style.left = 0
          elDialog.style.top = 0
          elDialog.style.marginTop = 0
          header.style.cursor = 'pointer'
          header.onmousedown = null
          isFullScreen = true
        } else {
          elDialog.style.height = originalHeight + 'px'
          elDialog.style.width = originalWidth + 'px'
          elDialog.style.left = originalLeft
          elDialog.style.top = originalTop
          elDialog.style.marginTop = originalMarginTop
          header.style.cursor = 'move'
          header.onmousedown = mouseDown
          isFullScreen = false
        }
      }
    }
  })
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:40:43  更:2022-03-21 20:43:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:26:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码