当前位置: 首页 > news >正文

直播系统开发,vue拖拽元素指令 - 云豹科技

直播系统开发,vue拖拽元素指令

记录简单实用的vue拖拽元素指令

bVbOWiS

 

drag.js(指令js)

// 绑定事件
function _addEvent(el, eventName, fn){if(document.addEventListener){el.addEventListener(eventName, fn, false);}else if(window.attachEvent){el.attactEvent('on' + eventName, fn);}
};
// 解绑事件
function _offEvent(el, eventName, fn){if(document.removeEventListener){el.removeEventListener(eventName, fn, false);}else if(window.detachEvent){el.detachEvent('on' + eventName, fn);}
};
export default {bind(el, binding, vnode) {if(!binding.value.dragElSelector){console.error('需传递拖拽元素的选择器,参数名:dragElSelector')return;}if(binding.value.useDrag === false){return;}const dialogHeaderEl = el.querySelector(binding.value.dragElSelector);const dragDom = el;// 是否使用边界,如果使用边界则元素不会被拖出窗口const useBoundary = binding.value.useBoundary !== false;const onDrag = binding.value.onDrag;dialogHeaderEl.style.cssText += ';cursor:move;';// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);const getStyle = (function() {if (window.document.currentStyle) {return (dom, attr) => dom.currentStyle[attr]} else {return (dom, attr) => getComputedStyle(dom, false)[attr]}})()let mouseDownEvent = (e) => {// console.log(e.clientX, e.clientY)// console.log(vnode); // 鼠标按下,计算当前元素距离可视区的距离const disX = e.clientX - dialogHeaderEl.offsetLeftconst disY = e.clientY - dialogHeaderEl.offsetTopconst dragDomWidth = dragDom.offsetWidthconst dragDomHeight = dragDom.offsetHeightconst screenWidth = document.body.clientWidth || window.innerWidthconst screenHeight = document.body.clientHeight || window.innerHeightconst minDragDomLeft = dragDom.offsetLeftconst maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidthconst minDragDomTop = dragDom.offsetTopconst maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight// console.log('minDragDomTop', minDragDomTop, maxDragDomTop)// console.log('screenHeight', screenHeight) // 获取到的值带px 正则匹配替换let styL = getStyle(dragDom, 'left')let styT = getStyle(dragDom, 'top')if (styL.includes('%')) {styL = +document.body.clientWidth * (+styL.replace(/%/g, '') / 100)styT = +document.body.clientHeight * (+styT.replace(/%/g, '') / 100)} else {styL = +styL.replace(/px/g, '')styT = +styT.replace(/px/g, '')}let mouseMoveEvent = (e) => {e.preventDefault();// 通过事件委托,计算移动的距离let left = e.clientX - disXlet top = e.clientY - disYif(useBoundary){// 边界处理if (-(left) > minDragDomLeft) {left = -minDragDomLeft} else if (left > maxDragDomLeft) {left = maxDragDomLeft}// console.log('top maxDragDomTop', top, maxDragDomTop)if (-top > minDragDomTop) {top = -minDragDomTop}else if (top > maxDragDomTop) {top = maxDragDomTop}}// 移动当前元素dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`// 执行 onDrag 事件if(typeof onDrag === 'function'){onDrag();}};_addEvent(document, 'mousemove', mouseMoveEvent);let mouseUpEvent = function () {_offEvent(document, 'mousemove', mouseMoveEvent);_offEvent(document, 'mouseup', mouseUpEvent);}_addEvent(document, 'mouseup', mouseUpEvent);};_addEvent(dialogHeaderEl, 'mousedown', mouseDownEvent);}
}

使用

<div class="simple-drag" v-drag="{dragElSelector: '.simple-drag'}"><div class="simple-drag-header"><h4 class="simple-drag-title">简单拖拽</h4><button type="button" class="close-btn"</button></div>
</div>

以上就是直播系统开发,vue拖拽元素指令, 更多内容欢迎关注之后的文章

http://www.zskr.cn/news/23414.html

相关文章:

  • 01.Python自动获取小说工具
  • 2025 年最新推荐砂浆厂家排行榜:聚焦多类型砂浆产品,助力采购方精准选优质供应商
  • 2025 年电缆桥架厂家最新推荐榜:涵盖不锈钢 / 铝合金 / 热镀锌等类型,精选高性能企业助力选购
  • Docker中授权普通用户使用docker命令以及解决无权限访问/var/run/docker.sock错误
  • 完整教程:【Linux】操作系统的认识
  • C# Avalonia 16- Animation- PathBasedAnimation
  • 2025年危险品运输公司权威推荐榜:安全高效,专业服务值得信赖!
  • 2025年发电机组厂家推荐排行榜,柴油/燃气/船用/静音箱式/移动拖车/集装箱式/上柴/玉柴/潍柴/康明斯/沃尔沃/道依茨/帕金斯/MTU发电机组公司精选
  • clickhouse数据库 数据插入 去重和覆盖
  • 2025年防水织带/鞋垫/编织包/针织包/飞织包包/松紧带/鞋带/织带/飞织鞋面厂家推荐排行榜,品质与创新的完美结合!
  • 2025年压铸机械手厂家推荐排行榜,铝镁合金压铸周边自动化,压铸岛专业解决方案!
  • 2025 年压滤机厂家最新推荐榜:隔膜 / 污泥 / 真空 / 板框 / 带式压滤机优质企业精选指南
  • 灵芯派(基于Debian系统)
  • 2025年手持光谱仪/光谱分析仪/便携式光谱仪厂家推荐榜单,矿石/元素/合金/金属/贵金属分析仪器首选!
  • 详细介绍:增强版 bash “zsh“
  • 2025年法兰保护罩/阀门保温罩/法兰罩/法兰防溅罩/法兰保护套厂家推荐排行榜,专业防护与优质服务首选!
  • 2025年无心/外圆磨床,滚丝机,外圆抛光机,送料机,送料架,自动化,机械手厂家推荐排行榜,专业品质与高效性能之选!
  • 2025年陶瓷过滤机厂家推荐排行榜,陶瓷真空/盘式/矿用/全自动/带式陶瓷过滤机,固液分离设备公司推荐!
  • 2025多校冲刺 CSP 模拟赛 6
  • 初次扫描设计
  • 2025年数粒机厂家推荐排行榜,防爆/新型/高速/高精度/智能/大容量/多通道/电子/视觉/全自动/低噪音/制药/农业/食品/电子元件/光电/定制化/鹌鹑蛋/糖果/坚果/药品/片剂数粒机公司推荐
  • 因果分布变化解释方法解析
  • 2025年塑料托盘厂家推荐排行榜,网格川字/九脚/田字/双面/平板/吹塑/注塑/焊接/印刷/组装款/高矮脚/反川字/立体库托盘公司精选
  • 2025年解冻设备厂家推荐排行榜,低温高湿/静电解冻/射频解冻/速冻螺旋/缓化柜/复醒柜设备公司精选!
  • 2025年防腐木加工厂权威推荐榜:环保耐用,品质卓越的厂家精选!
  • 2025年防水连接器/航空插头/工业网线厂家推荐排行榜,专业品质与耐用性能的首选!
  • 2025年铣刀厂家推荐排行榜,雕刻机/金刚石/木工/绝缘材料/碳纤维/亚克力/金属加工/铝合金/石墨/不锈钢/电木/塑胶/PC铣刀公司精选!
  • 2025年彩钢瓦,镀锌板,折弯件,C型钢,Z型钢,压型瓦,楼承板,钢结构安装,次檩条厂家推荐排行榜,品质与服务双重保障!
  • 2025年开关按钮厂家推荐排行榜,带灯/防水/防爆/防腐/紧急式/开启式/联锁式/旋转式/钥匙式/蘑菇头/面板式开关按钮公司精选
  • 2025年拉链厂家推荐排行榜,TAB拉链,大棕拉链,金属拉链,树脂拉链,服装拉链,尼龙拉链,防水拉链,隐形拉链,男装拉链,女装拉链公司推荐!