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

jq实现页面区域内拖动功能

拖动逻辑

// 客服拖动功能
$(document).ready(function () {// 是否可以拖动let isDragging = false;// 拖动的元素let $currentElement = null;$(document).on("touchstart", "#app-service", function (e) {// 禁止页面滚动$("body").addClass("dragging");$currentElement = $(this);isDragging = true;const touch = e.originalEvent.touches[0];// 获取相对于视口的位置const rect = $currentElement[0].getBoundingClientRect();// 计算手指在元素内的偏移(相对于视口)const offsetX = touch.clientX - rect.left;const offsetY = touch.clientY - rect.top;$currentElement.data("dragOffset", { offsetX, offsetY });}).on("touchmove", "#app-service", function (e) {if (!isDragging || !$currentElement) return;const touch = e.originalEvent.touches[0];const dragOffset = $currentElement.data("dragOffset");// 计算新位置(相对于视口)let newX = touch.clientX - dragOffset.offsetX;let newY = touch.clientY - dragOffset.offsetY;// 🔒 边界限制const windowWidth = $(window).width();const windowHeight = $(window).height();const width = $currentElement.outerWidth();const height = $currentElement.outerHeight();newX = Math.max(0, Math.min(newX, windowWidth - width));newY = Math.max(0, Math.min(newY, windowHeight - height));// 更新位置(fixed 定位,left/top 是相对于视口)$currentElement.css({left: newX + "px",top: newY + "px",});}).on("touchend touchcancel", "#app-service", function () {if (isDragging) {// 取消禁止页面滚动$("body").removeClass("dragging");isDragging = false;$currentElement = null;}});
});

拖动元素

  <div id="app-service"><img src="https://aff-im.bj.bcebos.com/onlineEnv/imsdk/assets/mobile-icon-3.png" alt="客服"></div>

样式

// 自定义客服样式
#app-service {position: fixed;top: 400px;right: 0;width: 60px;z-index: 99;/* 硬件加速,提升流畅度 */transform: translateZ(0);img {width: 100%;}
}
// 拖动客服禁止页面滚动
.dragging {overflow: hidden;
}

http://www.dtcms.com/a/329235.html

相关文章:

  • InfluxDB 在工业控制系统中的数据监控案例(一)
  • 自然语言处理的实际应用
  • 晓知识: 微服务CAP定理
  • 5. synchronized 关键字 - 监视器锁 monitor lock
  • 基于 MybatisPlus 将百度天气数据存储至 PostgreSQL 数据库的实践
  • 飞算JavaAI云原生实践:基于Docker与K8s的自动化部署架构解析
  • 深入理解 C++ 中的虚函数:原理、特点与使用场景
  • Nginx学习笔记(七)——Nginx负载均衡
  • Orange的运维学习日记--43.Ansible进阶之变量与加密
  • SQL详细语法教程(二)--DML(数据操作语言)和DQL(数据查询语言)
  • 健永科技工业自动化RFID解决方案
  • Linux:线程
  • LeetCode215~ 234题解
  • 《算法导论》第 23 章 - 最小生成树
  • 中高级餐饮服务食品安全员考试核心知识点汇总
  • 亚马逊精准词失灵:广告效能瓶颈的系统破解与矩阵重构
  • RK3588——DMABUF+CMA的完美组合
  • YOLO-v2-tiny 20种物体检测模型
  • 基于C语言基础对C++的进一步学习_C和C++编程范式、C与C++对比的一些补充知识、C++中的命名空间、文件分层
  • Java Redis基础入门:快速上手指南
  • 广东省省考备考(第七十五天8.13)——判断推理(图形推理题型总结)
  • flex布局之设置主轴上的子元素排列方式一
  • 机器学习之词向量转换
  • 【H5】禁止IOS、安卓端长按的一些默认操作
  • ios添加ic卡如何操作?
  • 8.12 数据分析(1)
  • mac 安卓模拟器 blueStacks
  • windows10的vs2019编译openssl静态库备忘
  • 随想记-excel报表美化
  • unity_MCP