分享一个可交互的小场景(二)

news/2025/2/27 3:48:27/

先看效果:

可互动的小场景

再看代码: JS部分

<script>var rotateDiv = document.getElementById('rot');var rotateIcons = document.getElementById('rot-icons');var clickRotateDiv = document.getElementById('click-rot');var angle = 0;clickRotateDiv.onclick = function() {angle += 60;rotateDiv.style.transform = 'rotate(' + angle + 'deg)';rotateIcons.style.transform = 'rotate(' + angle + 'deg)';};var step = 2;var color1 = 'rgba(0,0,0,0.5)';var color2 = 'rgba(0,0,0,0.1)';var gradient = ' conic-gradient(';for (var i = 0; i < 360; i += step) {var color = i % (2 * step) === 0 ? color1 : color2;gradient += color + ' ' + i + 'deg, ';}gradient = gradient.slice(0, -2) + '), rgb(85 93 108)';rotateDiv.style.background = gradient;var toggles = document.querySelectorAll('.toggle');var tempElement = document.querySelector('.temp');let isAnimating = false; // 添加标志以指示动画是否处于活动状态toggles.forEach(function(toggle) {toggle.addEventListener('click', function() {if (this.classList.contains('active') || isAnimating) { // 检查动画是否处于活动状态return;}toggles.forEach(function(toggle) {toggle.classList.remove('active');});this.classList.add('active');var tempValue = parseFloat(tempElement.textContent);if (this.id === 'toggle-cel') {var celsius = Math.round((tempValue - 32) * 5 / 9);tempElement.textContent = celsius + '°C';} else if (this.id === 'toggle-far') {var fahrenheit = Math.round(tempValue * 9 / 5 + 32);tempElement.textContent = fahrenheit + '°F';}});});let currentTempF = 34; // 使用以华氏度为单位的初始温度进行初始化function easeInOutCubic(t) {return t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1;}function changeTemp(element, newTemp) {let unit = element.innerHTML.includes("F") ? "°F" : "°C";let currentTemp = unit === "°F" ? currentTempF : Math.round((currentTempF - 32) * 5 / 9);let finalTemp = unit === "°F" ? newTemp : Math.round((newTemp - 32) * 5 / 9);let duration = 2000; // 动画的持续时间(毫秒)let startTime = null;function animate(currentTime) {if (startTime === null) {startTime = currentTime;}let elapsed = currentTime - startTime;let progress = Math.min(elapsed / duration, 1);progress = easeInOutCubic(progress);let tempNow = Math.round(currentTemp + (progress * (finalTemp - currentTemp)));element.innerHTML = `${tempNow}${unit}`;if (progress < 1) {requestAnimationFrame(animate);} else {// 动画完成后更新currentTempFcurrentTempF = newTemp;isAnimating = false; // 动画完成后重置标志}}isAnimating = true; // 动画开始时设置标志requestAnimationFrame(animate);}window.onload = function() {const sixths = Array.from(document.querySelectorAll('.sixths'));let index = 0;let temp = document.querySelector('.temp');document.querySelector('#rot-icons').addEventListener('click', () => {sixths[index].classList.remove('active');index = (index + 1) % sixths.length;sixths[index].classList.add('active');if (index == 0 ) {changeTemp(temp, 34);console.log("sun")document.querySelector('#mountains').classList.remove("snow");document.querySelector('#mountains').classList.remove("clouds");} else if (index == 1) {changeTemp(temp, 27);console.log("sunset")document.querySelector('#mountains').classList.add("sunset");} else if (index == 2) {changeTemp(temp, 14);console.log("moon")document.querySelector('#mountains').classList.remove("sunset");document.querySelector('#mountains').classList.add("moon");} else if (index == 3) {changeTemp(temp, 16);console.log("clouds")document.querySelector('#mountains').classList.add("clouds");} else if (index == 4) {changeTemp(temp, 8);console.log("storm")document.querySelector('#mountains').classList.add("storm");} else if (index == 5) {changeTemp(temp, -4);console.log("snow")document.querySelector('#mountains').classList.remove("moon");document.querySelector('#mountains').classList.remove("storm");document.querySelector('#mountains').classList.add("snow");}let loadingBar = document.querySelector('.loading-bar');loadingBar.classList.add('active');setTimeout(() => {loadingBar.classList.remove('active');}, 1200);});};
</script>

http://www.ppmy.cn/news/717402.html

相关文章

npm i -S 和 -D的区别

npm i(install) xxx:直接安装在当前文件夹下的node modules下&#xff0c;但不写入package.json npm i(instal) xxx -save(-S):直接安装在当前文件夹下的node modules下,写入package,json的dependencies npm i(install) xxx --save-dev(-D):直接安装在当前文件夹下的node mod…

arcgis的属性显示bug

arcgis中&#xff0c;右键图层属性可以查看图层的属性信息&#xff0c;比如坐标系、波段数、行列数等。 但是今天实验的时候发现&#xff0c;这个属性中显示的波段最大最小值并非真值。 该图层实际范围为&#xff1a;30~711。 在arcgis属性中&#xff0c;显示范围为0~651。 在…

光盘知识入门

有两种物理尺寸:12cm(4.7英寸)和8cm(3.1英寸), 厚度均为1.2mm,由两层0.6mm厚的基层粘合而成.这与CD是一致的.DVD盘片可以是单面或双面.每面都可以有1到2个数据层.盘片的容量决定于伴随视频的音频有多少,以及视频和音频是如何压缩的. 常被提到的133分钟这个数字并非真实: 只有一…

DVD光盘容量有多大

DVD-5&#xff08;D5&#xff09;&#xff1a;这个格式是指单面单层&#xff0c;总容量达4.7GB&#xff0c;超过2小时视频。由于该产品生产较早且技术较成熟&#xff0c;所以现在我们在市面上所见的DVD刻录碟片大多是这种。 DVD-9&#xff08;D9&#xff09;&#xff1a;这个格…

(洛谷)第二个题组题解

目录 快速排序 并查集 亲戚 新二叉树 美国血统 求先序排列 遍历问题 二叉树深度 搭配购买 ​ 朋友 修复公路 刻录光盘 快速排序 题目描述 利用快速排序算法将读入的 NN 个数从小到大排序后输出。 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可…

制作系统启动光盘

序言   最近看到不少朋友在论坛上发帖&#xff0c;问如何制作多合一的光盘&#xff0c;或者是想把一些常用工具之类的加入到自己喜欢的光盘中&#xff0c;等等之类。不过归根结底&#xff0c;这些问题都是关于可启动光盘制作的问题。   我曾经也被这些问题困惑&#xff0c;…

正确使用和保存刻录盘

许多朋友可能会觉得奇怪&#xff0c;使用刻录盘嘛&#xff0c;不就是放到刻录机里面进行刻录咯&#xff0c;还需要怎样正确使用呢&#xff1f;没错&#xff0c;这确实是用刻录盘进行刻录的方法&#xff0c;但这离“正确地使用刻录盘”还相差很远呢。 那么&#xff0c;怎样才算是…

40余种刻录盘片详细介绍

40余种刻录盘片详细介绍 ■刻录盘相关资料 CD-R以及DVD-R的工作原理是利用激光在空白盘片上烧出很小的凹坑&#xff08;Pit&#xff09;&#xff0c;这样的高低不平就代表了数字“0”和“1”。为了达到这个目的&#xff0c;盘片上就必须涂一层特殊的染料。目前刻录盘都是使用有…