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

这篇具有很好参考价值的文章主要介绍了分享一个可交互的小场景(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

先看效果:

可互动的小场景

再看代码: JS部分文章来源地址https://www.toymoban.com/news/detail-542667.html

<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 {
                // 动画完成后更新currentTempF
                currentTempF = 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>

到了这里,关于分享一个可交互的小场景(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023年华数杯数学建模C题思路分享

    1. 许多研究表明,母亲的身体指标和心理指标对婴儿的行为特征和睡眠质 量有影响,请问是否存在这样的规律,根据附件中的数据对此进行研究。 首先可以做一个问题的初分析,也即数据可视化,可以按婴儿的行为特征:安静性、中等性、矛盾性进行分类分析,分别对安静

    2024年02月09日
    浏览(42)
  • 数学建模及数据分析 || 4. 深度学习应用案例分享

    0.98 2.1 数据的准备工作 计算模块和数据的准备 Index([‘pclass’, ‘survived’, ‘name’, ‘sex’, ‘age’, ‘sibsp’, ‘parch’, ‘ticket’, ‘fare’, ‘cabin’, ‘embarked’, ‘boat’, ‘body’, ‘home.dest’], dtype=‘object’) ------------ pclass int64 survived int64 name object sex object age float64 sibsp in

    2024年02月12日
    浏览(57)
  • 2023大湾区粤港澳金融数学建模思路代码分享

    首先非常建议大家仔细的阅读这个题的题目介绍,还有附赠的就是那个附件里的那几篇材料,我觉得你把这些内容读透理解了,就可以完成至少第一、第二、第三问,嗯,好。然后对于题目里它主要第一部分给出了常用的估值模型,一个是市盈率估值模型,然后市净率估值模

    2024年02月06日
    浏览(45)
  • 数学建模美赛O奖、国赛国一队伍经验分享

    前言:本团队成员来自某985院校,均成功保研,有多次数学建模参赛经验,对数模有一定自己的理解和体会。本人有幸汇集了三支分别获2023美赛O奖、F奖、M奖、2022美赛F奖、国赛国一、国二的队伍经验,现整理成文章,供大家参考,内容将持续更新。 本博主参加数学建模赛事

    2024年02月08日
    浏览(76)
  • 和大家分享一下学习清风老师的数学建模课的过程

    作为一名大一数学系的新生,就读于某中上游985大学,为了锻炼自己的能力和为以后保研做准备,所以想参加数学建模大赛,于是便早早的组好了队友,想着早起的鸟儿有虫吃,起初是在学长学姐的建议下买了司守奎老师的《数学建模算法与应用》想着看书自学大干一番,可

    2024年04月25日
    浏览(32)
  • 分享一个docker无法启动的小问题

    准备看看docker服务怎么样 这一看就是docker的进程崩了,我们启动下进程 启动不了,我们运行下 systemctl status docker.service 看看报错 这些日志显示了 Docker 服务启动问题的原因。第一行提到了  /usr/lib/systemd/system/docker.service  文件的第一行存在一个 \\\"Invalid section header\\\" 错误。这意

    2024年02月21日
    浏览(43)
  • 【印象深刻的实战经历】两次全国大学生数学建模经历分享

    目录 🌼初次接触 初次参加培训 分享培训所得 比赛开始 🔥再次接触 参加校赛 机缘巧合 再次培训 比赛开始 📕技巧总结 从问题的实际意义分析大体上可分为 从问题的解决方法上分析  做国赛题目的步骤  赛前准备 选题  寻找思路   如何展开思路?  数学建模论文写作格

    2024年01月18日
    浏览(44)
  • 2023年美国大学生数学建模竞赛美赛B题思路分享

    2023美赛思路2023美国大学生数学建模竞赛思路 2023美赛ABCDEF题思路 给大家分享一下数模美赛中的那些论文摘要写作中的格式规范。 美赛开始后会第一时间分享美赛思路: 本文参考来源:美赛资料网 2023年美赛仅剩3天时间了,各位小伙伴们都准备的如何了呢?备战这么久为了避

    2024年02月07日
    浏览(57)
  • 2023美国大学生数学建模竞赛A题详细公式和代码分享

    目录 2023美赛A题翻译 1.1 建立一个数学模型,预测一个植物群落在各种不规则的天气周期中如何随时间变化。包括本该降水充足的干旱时期。该模型应考虑到干旱周期中不同物种之间的相互作用。 1.2就植物群落与大环境的长期相互作用,探讨你能从你的模型中得出什么结论。

    2024年02月11日
    浏览(60)
  • 分享一个比对图片是否一致的小工具(来源: github)

    运行效果图:  官网:  GitHub - codingfishman/image-diff: 一个方便的图片对比工具 一个方便的图片对比工具. Contribute to codingfishman/image-diff development by creating an account on GitHub. https://github.com/codingfishman/image-diff 优缺点: 1.采用比对各色块是否一致是该工具的核心,会出现因角度/光线不同而

    2024年02月04日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包