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

news/2025/10/18 9:30:20/文章来源:https://www.cnblogs.com/yunbaomengnan/p/19149218
直播系统开发,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.mzph.cn/news/939384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年托盘厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析,筛选优质品牌助力企业采购

在物流仓储行业快速发展的当下,托盘作为货物周转核心工具,其品质直接关系到企业运营效率与成本控制。当前市场上托盘厂家数量众多,产品质量参差不齐,部分产品存在承载力不足、易损坏、合规性不达标等问题,让企业在…

C# Avalonia 16- Animation- FrameBasedAnimation

C# Avalonia 16- Animation- FrameBasedAnimationFrameBasedAnimation.axaml代码<Window xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmln…

01.Python自动获取小说工具

01.Python自动获取小说工具 ———————————————————————————————————————————————————————————————————————————无敌小马爱学习

2025 年换热器厂家最新推荐榜:聚焦不锈钢、钛、哈氏合金等多材质及列管式等多类型设备,精选优质厂商助力企业采购决策

一、换热器厂家推荐榜推荐一:江苏豪特换热设备制造有限公司 推荐指数:★★★★★ 口碑评分:9.9 分 品牌介绍:该公司是换热器及船用密封件领域的实力品牌,拥有 30000 平米厂房,配备 15 台不同吨位板式换热器专用超…

2025 年最新推荐砂浆厂家排行榜:聚焦多类型砂浆产品,助力采购方精准选优质供应商

当前建筑市场对砂浆的需求持续攀升,但行业乱象却给采购方带来诸多困扰。部分厂家为牟取暴利,在原材料上偷工减料,导致砂浆关键性能不达标,给建筑工程埋下安全隐患;一些厂家生产工艺落后、缺乏完善的质量管控体系,…

2025 年电缆桥架厂家最新推荐榜:涵盖不锈钢 / 铝合金 / 热镀锌等类型,精选高性能企业助力选购

在现代建筑电气、工业自动化及数据中心等领域,电缆桥架作为核心基础设施,对线缆安全运行至关重要。但当前行业乱象频发,部分厂家用劣质原材料生产,导致桥架易腐蚀、断裂,引发安全隐患;产品质量参差不齐且缺乏统一…

h5直播源码,如何实现一个简易播放器? - 云豹科技

h5直播源码,如何实现一个简易播放器?利用 html + js + css 实现一个播放器的简单功能我们在页面开发过程中会遇到,在页面中播放视频的需求。通常我们利用成熟的 视频播放插件来处理如: video.js 。但是,为了我们的…

Docker中授权普通用户使用docker命令以及解决无权限访问/var/run/docker.sock错误

让普通用户在Linux系统中使用Docker命令,通常需要解决权限问题,尤其是避免遇到无法访问 /var/run/docker.sock的错误。docker.sock是一个Unix套接字,Docker客户端使用它同Docker守护进程进行通信。默认情况下,这个…

完整教程:【Linux】操作系统的认识

完整教程:【Linux】操作系统的认识2025-10-18 09:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

C# Avalonia 16- Animation- PathBasedAnimation

C# Avalonia 16- Animation- PathBasedAnimation写一个辅助类PathHelper,用于将PathGeometry转换为对应离散的Point,用于路径追踪。using System; using System.Collections.Generic; using Avalonia; using Avaloni…

2025年危险品运输公司权威推荐榜:安全高效,专业服务值得信赖!

2025年危险品运输公司权威推荐榜:安全高效,专业服务值得信赖!随着全球化工产业的快速发展,危险品运输行业的需求也在不断增加。为了确保危险品在运输过程中的安全性与效率,选择一家专业的危险品运输公司显得尤为重…

2025 年联轴器厂家最新推荐排行榜:聚焦万向、膜片、齿式等多类型产品,精选行业优质厂家

在现代工业生产中,联轴器作为连接机械传动部件的核心组件,直接影响设备运行的稳定性与效率,广泛应用于冶金、矿山、石油化工等关键领域。当前市场上联轴器品牌数量众多,产品质量参差不齐,部分企业存在技术落后、售…

2025 年换热器厂家最新推荐榜单:涵盖不锈钢钛哈氏合金等材质及列管式螺旋板等类型,为企业采购提供优质选择

引言在化工、环保、制药、食品等众多关键行业中,换热器作为核心热能交换设备,其质量稳定性、热交换效率与节能性能,直接关系到企业生产流程的连续性、能源成本控制及生产安全合规性。当前换热器市场企业数量繁杂,部…

2025 年最新推荐!反应釜制造厂家榜单重磅发布,聚焦不锈钢钛合金哈氏合金等多类型设备优质厂商

一、反应釜制造企业推荐榜推荐一:江苏旭阳化工设备有限公司 推荐指数:★★★★★ 口碑评分:9.9 分 品牌介绍:创建于 2009 年,坐落于靖江经济技术开发区城南园区,是集研发、生产和进出口贸易于一体的高科技企业。…

多模态、世界模型和主动智能丨Convo AIRTE2025

多模态是从 LLM 到 AGI 的必经之路。从 AI 视频生成到可实时交互的世界模型,从被动响应到主动感知与交互,再到下一代多模态大模型的设计与构建——由商汤科技和 RTE 开发者社区联合出品的 「多模态技术专场」 将展望…

2025年发电机组厂家推荐排行榜,柴油/燃气/船用/静音箱式/移动拖车/集装箱式/上柴/玉柴/潍柴/康明斯/沃尔沃/道依茨/帕金斯/MTU发电机组公司精选

2025年发电机组厂家推荐排行榜:柴油/燃气/船用/静音箱式/移动拖车/集装箱式/上柴/玉柴/潍柴/康明斯/沃尔沃/道依茨/帕金斯/MTU发电机组公司精选随着能源需求的不断增长和技术的快速发展,发电机组在各行各业中的应用越…

2025 防火隔断厂家最新推荐排行榜:甲级防火玻璃隔断厂家深度剖析,精选优质品牌助力采购决策

随着建筑行业对消防安全的要求日益严苛,防火隔断作为保障建筑安全的核心设施,市场需求持续攀升,但行业乱象却让采购者陷入选择困境。部分品牌缺乏核心技术,产品耐火性能不达标,火灾时无法有效阻隔火势与有毒烟气;…

clickhouse数据库 数据插入 去重和覆盖

一、存在则忽略(只插入全新用户)from clickhouse_driver import Client import pandas as pd client = Client(host=localhost, port=9000, database=default)# 0) 待写入的新数据 df_new = pd.DataFrame({ user_id:…

nacos客户端(接口调用者)如何感知被调用服务下线? (二)

🧩 一、问题背景 场景: 你有两个微服务:order-service(调用方 / Consumer)product-service(被调用方 / Provider)当 product-service 的一个实例下线(比如机器宕机或应用关闭)时, order-service 要知道它已…

2025 水泥墩源头厂家最新推荐排行榜:光伏 / 交通 / 围挡等多品类优选,实力品牌权威榜单发布

水泥墩作为市政基建、光伏电站、交通防护等领域的核心基础建材,其质量直接关系到工程安全与使用寿命。当前市场中厂家数量繁杂,部分企业为逐利偷工减料,导致产品强度不足、尺寸偏差大,难以抵御恶劣环境;部分厂家工…