wap网站建设方案 pdf即时设计

张小明 2026/1/13 12:20:13
wap网站建设方案 pdf,即时设计,高中网站制作,创建企业需要什么条件日常开发中经常遇到需要手动调整内容区大小的场景#xff0c;比如侧边栏、弹窗、报表面板等。分享一个我写的「拖拽调整大小指令」#xff0c;支持自定义最小尺寸、拖拽手柄样式#xff0c;能监听尺寸变化#x1f4cc; 先看效果#x1f6e0; 核心代码解析指令文件 directi…日常开发中经常遇到需要手动调整内容区大小的场景比如侧边栏、弹窗、报表面板等。分享一个我写的「拖拽调整大小指令」支持自定义最小尺寸、拖拽手柄样式能监听尺寸变化 先看效果 核心代码解析指令文件directives/resizable-full.js关键部分1. 指令钩子初始化 更新 清理Vue 指令的 3 个核心钩子保证指令的生命周期完整jsexport default { bind(el, binding) { // 指令绑定时初始化拖拽功能 initResizable(el, binding); }, update(el, binding) { // 禁用状态变化时重新初始化 if (binding.value?.disabled ! binding.oldValue?.disabled) { cleanupResizable(el); // 先清理旧的 initResizable(el, binding); // 再初始化新的 } }, unbind(el) { // 指令解绑时清理所有手柄和事件避免内存泄漏cleanupResizable(el); } };2. 初始化拖拽创建手柄 核心逻辑initResizable是核心函数主要做 2 件事创建拖拽手柄、写拖拽逻辑。1创建拖拽手柄我只保留了「右下角」的拖拽手柄其他方向注释掉了需要的话自己解开样式可自定义js// 定义手柄配置只留了bottom-right const handles [ { dir: bottom-right, style: { bottom: 0, right: 0, cursor: nwse-resize } } ]; // 循环创建手柄元素 handles.forEach(handleConf { const handle document.createElement(div); handle.className resizable-handle resizable-handle--${handleConf.dir}; handle.dataset.dir handleConf.dir; // 手柄样式小方块、半透明、hover高亮 Object.assign(handle.style, { position: absolute, width: ${handleSize}px, height: ${handleSize}px, background: handleColor, opacity: 0.6, zIndex: 999, transition: opacity 0.2s, ...handleConf.style }); // hover时手柄高亮 handle.addEventListener(mouseenter, () handle.style.opacity 1); handle.addEventListener(mouseleave, () handle.style.opacity 0.6); el.appendChild(handle); // 把手柄加到目标元素上 el._resizableConfig.handles.push(handle); // 存起来方便后续清理 });2拖拽核心逻辑分 3 步按下鼠标记录初始状态→ 移动鼠标计算新尺寸→ 松开鼠标触发回调 清理js// 1. 按下鼠标记录初始位置和尺寸 const mouseDownHandler (e) { const handle e.target.closest(.resizable-handle); if (!handle) return; e.stopPropagation(); e.preventDefault(); const dir handle.dataset.dir; const rect el.getBoundingClientRect(); // 获取元素当前位置和尺寸 // 存初始状态鼠标位置、元素尺寸/位置 startState { dir, startX: e.clientX, startY: e.clientY, startWidth: rect.width, startHeight: rect.height }; // 绑定移动/松开事件绑在document上避免拖拽时鼠标移出元素失效 document.addEventListener(mousemove, onMouseMove); document.addEventListener(mouseup, onMouseUp); }; // 2. 移动鼠标计算新宽高并赋值 const onMouseMove (e) { if (!startState) return; const { dir, startX, startY, startWidth, startHeight } startState; let newWidth startWidth; let newHeight startHeight; // 只处理右下角拖拽宽高都增加 if (dir bottom-right) { newWidth startWidth (e.clientX - startX); newHeight startHeight (e.clientY - startY); } // 限制最小宽高避免拖到太小 newWidth Math.max(minWidth, newWidth); newHeight Math.max(minHeight, newHeight); // 给元素设置新尺寸 el.style.width ${newWidth}px; el.style.height ${newHeight}px; }; // 3. 松开鼠标触发回调清理事件 const onMouseUp () { // 拖拽结束触发自定义回调返回最新尺寸 if (startState el._resizableConfig.onResize) { el._resizableConfig.onResize({ width: parseInt(el.style.width), height: parseInt(el.style.height) }); } startState null; // 移除事件避免重复绑定 document.removeEventListener(mousemove, onMouseMove); document.removeEventListener(mouseup, onMouseUp); }; // 给元素绑定按下事件 el.addEventListener(mousedown, mouseDownHandler);3. 清理函数避免内存泄漏cleanupResizable负责移除所有手柄元素和事件监听器指令解绑时必执行jsfunction cleanupResizable(el) { if (el._resizableConfig) { // 移除所有手柄 el._resizableConfig.handles.forEach(handle { if (handle.parentNode el) el.removeChild(handle); }); // 移除所有事件监听器 el.removeEventListener(mousedown, el._resizableConfig.mouseDownHandler); document.removeEventListener(mousemove, el._resizableConfig.mouseMoveHandler); document.removeEventListener(mouseup, el._resizableConfig.mouseUpHandler); // 删除配置释放内存 delete el._resizableConfig; } } 如何使用全局注册指令main.jsjsimport resizableFull from ./directives/resizable-full; Vue.directive(resizable-full, resizableFull);2.页面中使用vuetemplate !-- 给需要拖拽的元素加指令 -- div v-resizable-full{ minWidth: 300, // 最小宽度 minHeight: 200, // 最小高度 handleSize: 10, // 手柄大小 handleColor: #409eff, // 手柄颜色 onResize: handleResize // 拖拽结束回调 } styleposition: relative; width: 400px; height: 300px; border: 1px solid #eee; 我是可拖拽调整大小的内容区 /div /template script export default { methods: { // 拖拽结束拿到最新尺寸 handleResize({ width, height }) { console.log(新尺寸, width, height); } } }; /script 关键注意点避坑目标元素必须设position: relative/absolute/fixed因为手柄是绝对定位依赖父元素的定位事件绑在 document 上拖拽时鼠标可能移出目标元素绑在 document 上才不会断一定要清理事件 / 元素指令解绑时执行cleanupResizable避免内存泄漏最小尺寸限制通过minWidth/minHeight避免元素被拖到太小影响体验。 扩展玩法解开注释的其他 7 个方向手柄实现全方向拖拽给手柄加 hover 提示比如 “拖拽调整大小”支持拖拽时实时触发回调不止结束时自定义手柄样式比如改成虚线、加图标。 总结这个自定义指令核心是「创建拖拽手柄 监听鼠标事件 计算尺寸变化」逻辑不复杂可以根据自己的业务场景定制。亲测报表和弹窗都很适用
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

内蒙古建设厅安全资料网站seo外链专员

如何在浏览器中快速解锁加密音乐文件:Unlock Music完整使用指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地…

张小明 2026/1/11 22:54:07 网站建设

h5网站开发用什么软件制作做网站是否需要自购服务器

终极模组管理指南:如何一键安装所有游戏模组 【免费下载链接】ModAssistant Simple Beat Saber Mod Installer 项目地址: https://gitcode.com/gh_mirrors/mo/ModAssistant 还在为复杂的游戏模组安装流程而头疼吗?现在有了这款专业的模组管理工具…

张小明 2026/1/8 22:59:18 网站建设

强军网网站建设建筑工程资质

本文详解AI智能体的本质区别、三大核心特征及落地路径,涵盖模型选型、工具定义、指令配置等关键组件,解析单智能体与多智能体编排模式,并强调安全护栏体系的重要性,为开发者提供从0到1构建智能体的完整路线图,助力抢占…

张小明 2026/1/8 21:24:37 网站建设

招聘网站html模板关于加强网站建设的情况说明

Inter字体终极使用指南:从入门到精通的全方位教程 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter 还在为选择适合项目的开源字体而烦恼吗?Inter字体作为一款精心设计的无衬线字体,…

张小明 2026/1/9 23:29:22 网站建设

网站建设和运营可以做微信游戏的网站有哪些

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。 📌 概述 导入导出模块用于数据的导入和导出。这个模块支持将应用数据导出为JSON或CSV格式,也支持从这些格式的文件中导入数据。通过Cordova框架,我们能够在W…

张小明 2026/1/8 22:03:38 网站建设

山东住房城乡建设厅网站首页.net做网站教程

还在为官方控制软件的臃肿功能和隐私风险而困扰吗?OmenSuperHub为你提供纯净、高效、安全的离线管理体验,让你的游戏本性能得到完美释放。 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 痛点解决方案…

张小明 2026/1/8 22:16:25 网站建设