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

JS_围绕圆形滑动

需求:滑动手势最大不能超过一个半径为50的圆形,超出围绕圆形边线滑动
这里只提供一个思路,下面代码可以运行,但是要使用需要改成自己的参数

<div style="width: 100%;height: 100vh;display: flex;justify-content: center;align-items: center;"><div style="width: 100px;height: 100px;background: #888;border-radius: 50%;"><div id="myElement" style="width: 20px;height: 20px;border-radius: 50%;background: red;position: absolute;"></div></div>
</div>
<script>var circleRadius = 50; // 圆形半径// 获取圆心坐标var circleCenterX = window.innerWidth / 2;var circleCenterY = window.innerHeight / 2;// 添加滑动事件监听器document.addEventListener('mousemove', handleMouseMove);// 处理滑动事件function handleMouseMove(event) {// 获取鼠标相对于窗口的坐标var mouseX = event.clientX;var mouseY = event.clientY;// 计算鼠标位置相对于圆心的偏移量var offsetX = mouseX - circleCenterX;var offsetY = mouseY - circleCenterY;// 计算鼠标位置相对于圆心的距离var distance = Math.sqrt(offsetX * offsetX + offsetY * offsetY);// 如果距离大于半径,则将偏移量按比例缩小到半径范围内if (distance > circleRadius) {var ratio = circleRadius / distance;offsetX *= ratio;offsetY *= ratio;}// 计算围绕圆心的新坐标var newX = circleCenterX + offsetX;var newY = circleCenterY + offsetY;// 更新元素位置(这里假设要更新一个元素的位置)var element = document.getElementById('myElement');element.style.left = newX + 'px';element.style.top = newY + 'px';}
</script>

示例

在这里插入图片描述

此示例是一个鼠标按下放开的示例,手机端可以替换为手机的事件

<div style="width: 100%;height: 100vh;display: flex;justify-content: center;align-items: center;"><div style="width: 100px;height: 100px;background: #888;border-radius: 50%;position: relative;display: flex;justify-content: center;align-items: center;"><div onmousedown="mousedown(event)" onmouseup="mouseup(event)" id="myElement" style="width: 20px;height: 20px;border-radius: 50%;background: red;position: relative;"></div></div>
</div>
<script>var circleRadius = 50; // 圆形半径// 获取圆心坐标var circleCenterX = 0var circleCenterY = 0// 添加滑动事件监听器document.addEventListener('mousemove', handleMouseMove);function mousedown(event) {circleCenterX = event.clientX;circleCenterY = event.clientY;}function mouseup() {circleCenterX = 0circleCenterY = 0var element = document.getElementById('myElement');element.style.left = '0px';element.style.top = '0px';}// 处理滑动事件function handleMouseMove(event) {// 获取鼠标相对于窗口的坐标var mouseX = event.clientX;var mouseY = event.clientY;// 计算鼠标位置相对于圆心的偏移量var offsetX = mouseX - circleCenterX;var offsetY = mouseY - circleCenterY;// 计算鼠标位置相对于圆心的距离var distance = Math.sqrt(offsetX * offsetX + offsetY * offsetY);// 如果距离大于半径,则将偏移量按比例缩小到半径范围内if (distance > circleRadius) {var ratio = circleRadius / distance;offsetX *= ratio;offsetY *= ratio;}// 计算围绕圆心的新坐标var newX = offsetX;var newY = offsetY;if(circleCenterX >0) {// 更新元素位置(这里假设要更新一个元素的位置)var element = document.getElementById('myElement');element.style.left = newX + 'px';element.style.top = newY + 'px';}}
</script>
http://www.lryc.cn/news/124342.html

相关文章:

  • Ubuntu上安装RabbitMQ
  • 统计学和机器学习之间的联系和区别
  • linux中profile.d和profile的区别
  • MobaXterm sftp 不能拖拽文件夹了?
  • 【ArcGIS Pro二次开发】(59):Editing(编辑)模块
  • WebSocket与消息推送
  • 5.1 web浏览安全
  • (六)Unity开发Vision Pro——词汇表
  • 算法随笔:图论问题之割点割边
  • 【虚幻引擎】UE5数字人的创建
  • 算法:深度优先遍历
  • Stable Diffusion + Deform制作指南
  • ssm+vue网上花店设计源码和论文
  • 【leetcode】第一章数组
  • 01|Java中常见错误或不清楚
  • 递归的用法和例子
  • 极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)
  • springBoot 简单的demo
  • [国产MCU]-BL602开发实例-实时时钟(RTC)
  • 大数据Flink(六十三):SqlClient工具的使用
  • 哈威比例多路阀控制放大器
  • Java bean 是个什么概念?
  • 微服务系列文章之 Springboot+Vue实现登录注册
  • 【Docker】如何在设计 dockerfile 过程中,设置容器启动后的定时任务
  • 【leetcode】第三章 哈希表part01
  • Docker中Tomcat部署步骤
  • pycharm 安装库
  • 使用 Ploomber、Arima、Python 和 Slurm 进行时间序列预测
  • springboot第35集:微服务与flutter安卓App开发
  • java 把list转成json