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

网站模板佳好乐云seo丰宁县建设局网站

网站模板佳好乐云seo,丰宁县建设局网站,网站建设淄博,wordpress支付下载插件这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 说在前面 鼠标控制元素旋转在现在也是一个很常见的功能,让我们从实现div元素的旋转控制开始来了解元素旋转的具体原理和实现方法吧。 效果展示 体验地址 code.juejin.cn/pen/7290719… 实现…

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

说在前面

鼠标控制元素旋转在现在也是一个很常见的功能,让我们从实现div元素的旋转控制开始来了解元素旋转的具体原理和实现方法吧。

效果展示

体验地址

code.juejin.cn/pen/7290719…

实现步骤

画一个div

首先我们需要先画一个div,并在它上方加上旋转图标,我们可以通过这个图标来对div进行旋转,具体代码如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><link rel="stylesheet" href="./index.css" /></head><body><div class="container"><div class="rotate-div"><div class="rotate-icon">↻</div></div></div></body><script src="./index.js"></script>
</html>

加点css

将div设置为红色背景的方块,调整旋转图标的位置,具体代码如下:

.container {display: flex;justify-content: center;align-items: center;height: 100vh;
}.rotate-div {position: relative;width: 200px;height: 200px;background-color: red;transform-origin: center center;
}.rotate-icon {position: absolute;top: -50px; /* 调整图标的位置 */left: 50%;transform: translateX(-50%);font-size: 20px;cursor: pointer;
}

效果如下:

完成鼠标拖拽旋转功能

鼠标在旋转图标按下的时候,我们需要监听鼠标移动事件,根据鼠标移动位置和初始点击位置的相对角度来计算方块旋转的角度。

1、获取方块和旋转图标元素对象

首先我们要先获取方块和旋转图标元素对象,便于后续事件监听和元素操作。

const rotateDiv = document.querySelector(".rotate-div");
const rotateIcon = document.querySelector(".rotate-icon");

返回值类型:TextRectangle对象,每个矩形具有四个整数性质( 上, 右 , 下,和左 )表示的坐标的矩形,以像素为单位。

 rectObject.top:元素上边到视窗上边的距离;

 rectObject.right:元素右边到视窗左边的距离;

 rectObject.bottom:元素下边到视窗上边的距离;

 rectObject.left:元素左边到视窗左边的距离;

我们记录下方块的初始中心点:

 const centerX = rect.left + rect.width / 2;const centerY = rect.top + rect.height / 2;
(2)计算旋转角度

Math.atan2()

  • 概述

Math.atan2()  返回从原点 (0,0) 到 (x,y) 点的线段与 x 轴正方向之间的平面角度 (弧度值),也就是 Math.atan2(y,x)

  • 语法
Math.atan2(y, x)
  • 参数

y, x

  • 描述

atan2 方法返回一个 -pi 到 pi 之间的数值,表示点 (x, y) 对应的偏移角度。这是一个逆时针角度,以弧度为单位,正 X 轴和点 (x, y) 与原点连线 之间。注意此函数接受的参数:先传递 y 坐标,然后是 x 坐标。

atan2 接受单独的 x 和 y 参数,而 atan 接受两个参数的比值。

由于 atan2 是 Math 的静态方法,所以应该像这样使用:Math.atan2(),而不是作为你创建的 Math 实例的方法。

function getAngle(centerX, centerY, mouseX, mouseY) {return Math.atan2(mouseY - centerY, mouseX - centerX) * (180 / Math.PI);
}

使用当前鼠标位置相对角度减去鼠标初始点击点的相对角度即可得到鼠标旋转的角度。

startingMouseAngle = getAngle(centerX, centerY, event.clientX, event.clientY);
const deltaMouseAngle = currentMouseAngle - startingMouseAngle;
(3)旋转角度简化

方块的最大旋转角度为360度,所以我们对角度进行取模,保持旋转角度在360度以内即可。

function normalizeRotation(rotation) {if (rotation >= 0) {return rotation % 360;} else {return (rotation % 360) + 360;}
}
(4)给方块设置旋转角度
rotateDiv.style.transform = `rotate(${newRotation}deg)`;
3、移除旋转逻辑

鼠标抬起的时候我们应该将旋转逻辑给移除,及将鼠标移动和抬起事件移除。

function stopSpin() {window.removeEventListener("mousemove", spin);window.removeEventListener("mouseup", stopSpin);
}
4、完整代码

完整的JavaScrip代码如下:

const rotateDiv = document.querySelector(".rotate-div");
const rotateIcon = document.querySelector(".rotate-icon");let startingMouseAngle = 0;
let startingRotation = 0;rotateIcon.addEventListener("selectstart", function (event) {event.preventDefault();
});
rotateIcon.addEventListener("mousedown", function (event) {const rect = rotateDiv.getBoundingClientRect();const centerX = rect.left + rect.width / 2;const centerY = rect.top + rect.height / 2;startingMouseAngle = getAngle(centerX, centerY, event.clientX, event.clientY);startingRotation = getCurrentRotation();window.addEventListener("mousemove", spin);window.addEventListener("mouseup", stopSpin);
});function stopSpin() {window.removeEventListener("mousemove", spin);window.removeEventListener("mouseup", stopSpin);
}function spin(event) {const rect = rotateDiv.getBoundingClientRect();const centerX = rect.left + rect.width / 2;const centerY = rect.top + rect.height / 2;const currentMouseAngle = getAngle(centerX,centerY,event.clientX,event.clientY);const deltaMouseAngle = currentMouseAngle - startingMouseAngle;let newRotation = startingRotation + deltaMouseAngle;newRotation = normalizeRotation(newRotation);rotateDiv.style.transform = `rotate(${newRotation}deg)`;
}function normalizeRotation(rotation) {if (rotation >= 0) {return rotation % 360;} else {return (rotation % 360) + 360;}
}function getAngle(centerX, centerY, mouseX, mouseY) {return Math.atan2(mouseY - centerY, mouseX - centerX) * (180 / Math.PI);
}function getCurrentRotation() {const transformStyle = window.getComputedStyle(rotateDiv).getPropertyValue("transform");const matrix = new DOMMatrixReadOnly(transformStyle);const angle = Math.acos(matrix.a) * (180 / Math.PI);return matrix.b < 0 ? -angle : angle;
}

本文转载于:

https://juejin.cn/post/7290410631655292969

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

http://www.sczhlp.com/news/146366/

相关文章:

  • 建网站公司哪里好如何缩小wordpress文字边距
  • 如何建立分销网站网站托管流程
  • 中国建设银行网站会员登录wordpress term_group
  • 用html5做的简单的网站西城专业网站建设公司
  • 网站形式的设计上传html到wordpress
  • 上海网站建设哪家企业品牌网站建设預定大蝌蚪
  • 哪里可以做产品购物网站企业网站建设一条龙多少钱
  • 琴行网站开发学术论文游戏介绍网站模板下载地址
  • 如何用域名做网站访问wordpress 插件 支付
  • 求个网站你懂我的意思吗wordpress保存的字体
  • 从什么网站找做app的代码成华区微信网站建设推广
  • 做汤的网站有哪些小程序在哪个网站做
  • 三亚哪里做网站wordpress 页面加载时间 查询次数_和内存
  • .net电子商城网站开发设计wordpress图片尺寸00
  • 沧州做网站哪家公司好淘宝推广工具
  • 安徽seo网络优化师陕西seo主管
  • 中国社区建设展示中心网站wordpress+边框插件
  • 怎样用记事本做网站物流公司招聘信息
  • php网站开发过程开发网站比较好的公司
  • 网站上加一个浮动小框怎么做三水区建设局网站
  • php网站空间购买做gif动态图网站
  • 有了域名搭建网站详细步骤设计模式
  • 网络营销自学网站服务平台的宗旨
  • phpcms获取网站访问量专业长沙做网站公司
  • 网站加图标四平网站公司
  • 求大神帮忙做网站樊城区建设局网站
  • 北京哪家做网站优化学习网站建设的步骤
  • js网站页面效果代码WordPress搭建點播流媒體
  • 网站建设是在商标哪个类别服务网站建设方案
  • 长春本地网站制作深圳app外包开发公司