用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

这篇具有很好参考价值的文章主要介绍了用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

部分数据来源:ChatGPT 

引言

        太阳和月亮对于我们来说是一种常见的对比,这篇文章将介绍一个使用HTML、CSS和JavaScript创建的网页场景,能够把太阳和月亮切换展示给用户。这个场景能够让用户使用鼠标和滚轮与场景互动,带来更多的趣味和体验。

HTML代码实现部分

这里展示了HTML部分的代码来创建页面结构,包括头部文件声明,以及结构元素body和其中的两个div标签。

<!DOCTYPE html>
<html lang="zh-CN">

<head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>太阳和月亮切换</title>
 <style>
   /* CSS代码在这里*/
 </style>
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />
</head>

<body>
  <!-- 页面容器 -->
  <div id="page-container">
    <!-- 立方体面板 -->
    <div class="face front"></div>
    <div class="face back"></div>
    <div class="face top"></div>
    <div class="face bottom"></div>
    <div class="face left"></div>
    <div class="face right"></div>
  </div>
  <!-- 太阳和月亮切换按钮 -->
  <div id="sun-moon-toggle" onclick="toggleSunMoon()">
    <i class="fas fa-moon"></i>
    <i class="fas fa-sun"></i>
  </div>

 <script>
   // JavaScript代码在这里
 </

在代码中, #page-container 这个元素用来定义一个3D立方体场景,而 #sun-moon-toggle 用来表示切换按钮。页面中也链接了一个Font Awesome图标库实现按钮图标的展示。

CSS代码实现部分

下面是CSS代码的具体实现细节,其中包括页面元素的外观(如颜色、大小、位置等)以及3D场景的效果等。

   /* 设置 HTML 元素高度为 100% */
    html {
      height: 100%;
    }

    /* 设置 body 元素样式 */
    body {
      margin: 0;
      height: 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      background-color: #2d3436;
      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    }

    /* 设置页面容器样式 */
    #page-container {
      width: 500px;
      height: 500px;
      position: relative;
      transform-style: preserve-3d;
      transition: transform 0.3s ease-in-out;
    }

    /* 设置太阳和月亮切换按钮样式 */
    #sun-moon-toggle {
      position: absolute;
      top: 20px;
      right: 0px;
      z-index: 1;
      cursor: pointer;
      width: 60px;
      height: 60px;
      display: flex;
      justify-content: center;
      align-items: center;
      border-radius: 50%;
      background-color: #fff;
      box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.3);
      transition: right 0.3s ease-in-out;
    }

    /* 设置太阳和月亮图标样式 */
    #sun-moon-toggle i {
      font-size: 28px;
      color: #f39c12;
      transition: color 0.3s ease-in-out;
    }

    /* 设置太阳和月亮切换按钮为夜间模式样式 */
    #sun-moon-toggle.sun-shown i.fa-moon {
      color: #f1c40f;
    }

    /* 设置太阳和月亮切换按钮为白天模式样式 */
    #sun-moon-toggle.sun-shown i.fa-sun {
      color: #fdcb6e;
    }

    /* 设置立方体面板样式 */
    .face {
      width: 500px;
      height: 500px;
      position: absolute;
      background-repeat: no-repeat;
      background-size: 100% 100%;
      border: 5px solid #fff;
      box-sizing: border-box;
      transform: translate3d(0, 0, 250px);
    }

    /* 设置前面板样式 */
    .front {
      background-image: url("https://picsum.photos/500");
      transform: rotateY(0deg) translateZ(250px);
    }

    /* 设置后面板样式 */
    .back {
      background-image: url("https://picsum.photos/501");
      transform: rotateY(180deg) translateZ(250px);
    }

    /* 设置上面板样式 */
    .top {
      background-image: url("https://picsum.photos/502");
      transform: rotateX(-90deg) translateZ(250px);
    }

    /* 设置底面板样式 */
    .bottom {
      background-image: url("https://picsum.photos/503");
      transform: rotateX(90deg) translateZ(250px);
    }

    /* 设置左面板样式 */
    .left {
      background-image: url("https://picsum.photos/504");
      transform: rotateY(-90deg) translateZ(250px);
    }

    /* 设置右面板样式 */
    .right {
      background-image: url("https://picsum.photos/505");
      transform: rotateY(90deg) translateZ(250px);
    }

JavaScript代码实现部分

下面是JavaScript代码的实现,其中包括:

  • 获取页面DOM元素
  • 初始化变量
  • 切换太阳和月亮的按钮点击事件
  • 鼠标按下、松开和移动事件
  • 鼠标滚轮事件

完整JavaScript代码如下:

 // 获取DOM元素
    const pageContainer = document.getElementById("page-container");
    const sunMoonToggle = document.getElementById("sun-moon-toggle");
    const moonIcon = document.querySelector("#sun-moon-toggle .fa-moon");
    const sunIcon = document.querySelector("#sun-moon-toggle .fa-sun");

    // 初始化变量
    let isSunShown = false; // 初始状态下显示月亮

    // 为按钮绑定点击事件
    function toggleSunMoon() {
      if (isSunShown) {
        // 从太阳到月亮
        sunMoonToggle.classList.remove("sun-shown");
        moonIcon.style.display = "inline-block";
        sunIcon.style.display = "none";
        document.body.style.backgroundColor = "#2d3436";
      } else {
        // 从月亮到太阳
        sunMoonToggle.classList.add("sun-shown");
        sunIcon.style.display = "inline-block";
        moonIcon.style.display = "none";
        document.body.style.backgroundColor = "#ffeaa7";
      }
      isSunShown = !isSunShown;
    }

    // 鼠标按下事件
    let isMouseDown = false;
    let pageX, pageY;
    document.addEventListener("mousedown", (event) => {
      isMouseDown = true;
      pageX = event.pageX;
      pageY = event.pageY;
    });

    // 鼠标松开事件
    document.addEventListener("mouseup", () => {
      isMouseDown = false;
    });

    // 鼠标移动事件
    document.addEventListener("mousemove", (event) => {
      if (!isMouseDown) return;
      const deltaX = event.pageX - pageX;
      const deltaY = event.pageY - pageY;
      pageContainer.style.transform += `rotateX(${deltaY * 0.5}deg) rotateY(${deltaX * -0.5
        }deg)`;
      pageX = event.pageX;
      pageY = event.pageY;
    });

    // 鼠标滚轮事件
    let scale = 1;
    document.addEventListener("wheel", (event) => {
      event.preventDefault();
      scale += event.deltaY * -0.01;
      scale = Math.min(Math.max(0.5, scale), 3); // 缩放边界
      pageContainer.style.transform = `rotateX(0deg) rotateY(0deg) scale(${scale})`;
    });

        在这个代码片段中, scale 变量存储当前页面的缩放比例,当鼠标滚轮事件发生时, event.deltaY 用于获取鼠标滚轮的方向(正值表示向上滚动,负值则表示向下滚动),并根据其值更新 scale 变量。同时更新页面样式中的transform属性,以实现页面缩放。

完整的HTML、CSS和JavaScript代码如下:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>太阳和月亮切换</title>
  <style>
    /* 设置 HTML 元素高度为 100% */
    html {
      height: 100%;
    }

    /* 设置 body 元素样式 */
    body {
      margin: 0;
      height: 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      background-color: #2d3436;
      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    }

    /* 设置页面容器样式 */
    #page-container {
      width: 500px;
      height: 500px;
      position: relative;
      transform-style: preserve-3d;
      transition: transform 0.3s ease-in-out;
    }

    /* 设置太阳和月亮切换按钮样式 */
    #sun-moon-toggle {
      position: absolute;
      top: 20px;
      right: 0px;
      z-index: 1;
      cursor: pointer;
      width: 60px;
      height: 60px;
      display: flex;
      justify-content: center;
      align-items: center;
      border-radius: 50%;
      background-color: #fff;
      box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.3);
      transition: right 0.3s ease-in-out;
    }

    /* 设置太阳和月亮图标样式 */
    #sun-moon-toggle i {
      font-size: 28px;
      color: #f39c12;
      transition: color 0.3s ease-in-out;
    }

    /* 设置太阳和月亮切换按钮为夜间模式样式 */
    #sun-moon-toggle.sun-shown i.fa-moon {
      color: #f1c40f;
    }

    /* 设置太阳和月亮切换按钮为白天模式样式 */
    #sun-moon-toggle.sun-shown i.fa-sun {
      color: #fdcb6e;
    }

    /* 设置立方体面板样式 */
    .face {
      width: 500px;
      height: 500px;
      position: absolute;
      background-repeat: no-repeat;
      background-size: 100% 100%;
      border: 5px solid #fff;
      box-sizing: border-box;
      transform: translate3d(0, 0, 250px);
    }

    /* 设置前面板样式 */
    .front {
      background-image: url("https://picsum.photos/500");
      transform: rotateY(0deg) translateZ(250px);
    }

    /* 设置后面板样式 */
    .back {
      background-image: url("https://picsum.photos/501");
      transform: rotateY(180deg) translateZ(250px);
    }

    /* 设置上面板样式 */
    .top {
      background-image: url("https://picsum.photos/502");
      transform: rotateX(-90deg) translateZ(250px);
    }

    /* 设置底面板样式 */
    .bottom {
      background-image: url("https://picsum.photos/503");
      transform: rotateX(90deg) translateZ(250px);
    }

    /* 设置左面板样式 */
    .left {
      background-image: url("https://picsum.photos/504");
      transform: rotateY(-90deg) translateZ(250px);
    }

    /* 设置右面板样式 */
    .right {
      background-image: url("https://picsum.photos/505");
      transform: rotateY(90deg) translateZ(250px);
    }
  </style>
  <!-- 引入 font-awesome 图标库的 CSS 文件 -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />
</head>

<body>
  <!-- 页面容器 -->
  <div id="page-container">
    <!-- 立方体面板 -->
    <div class="face front"></div>
    <div class="face back"></div>
    <div class="face top"></div>
    <div class="face bottom"></div>
    <div class="face left"></div>
    <div class="face right"></div>
  </div>
  <!-- 太阳和月亮切换按钮 -->
  <div id="sun-moon-toggle" onclick="toggleSunMoon()">
    <i class="fas fa-moon"></i>
    <i class="fas fa-sun"></i>
  </div>

  <script>
    // 获取DOM元素
    const pageContainer = document.getElementById("page-container");
    const sunMoonToggle = document.getElementById("sun-moon-toggle");
    const moonIcon = document.querySelector("#sun-moon-toggle .fa-moon");
    const sunIcon = document.querySelector("#sun-moon-toggle .fa-sun");

    // 初始化变量
    let isSunShown = false; // 初始状态下显示月亮

    // 为按钮绑定点击事件
    function toggleSunMoon() {
      if (isSunShown) {
        // 从太阳到月亮
        sunMoonToggle.classList.remove("sun-shown");
        moonIcon.style.display = "inline-block";
        sunIcon.style.display = "none";
        document.body.style.backgroundColor = "#2d3436";
      } else {
        // 从月亮到太阳
        sunMoonToggle.classList.add("sun-shown");
        sunIcon.style.display = "inline-block";
        moonIcon.style.display = "none";
        document.body.style.backgroundColor = "#ffeaa7";
      }
      isSunShown = !isSunShown;
    }

    // 鼠标按下事件
    let isMouseDown = false;
    let pageX, pageY;
    document.addEventListener("mousedown", (event) => {
      isMouseDown = true;
      pageX = event.pageX;
      pageY = event.pageY;
    });

    // 鼠标松开事件
    document.addEventListener("mouseup", () => {
      isMouseDown = false;
    });

    // 鼠标移动事件
    document.addEventListener("mousemove", (event) => {
      if (!isMouseDown) return;
      const deltaX = event.pageX - pageX;
      const deltaY = event.pageY - pageY;
      pageContainer.style.transform += `rotateX(${deltaY * 0.5}deg) rotateY(${deltaX * -0.5
        }deg)`;
      pageX = event.pageX;
      pageY = event.pageY;
    });

    // 鼠标滚轮事件
    let scale = 1;
    document.addEventListener("wheel", (event) => {
      event.preventDefault();
      scale += event.deltaY * -0.01;
      scale = Math.min(Math.max(0.5, scale), 3); // 缩放边界
      pageContainer.style.transform = `rotateX(0deg) rotateY(0deg) scale(${scale})`;
    });
  </script>
</body>

</html>

这段代码段通过HTML、CSS、JavaScript实现了一个太阳和月亮切换的3D动画效果,实现了用户可鼠标观看的效果,兼具技术性和美观性。

效果图

用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

鼠标长按可以旋转 

用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

按钮切换背景 

用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

鼠标滑轮滚动可以缩放

用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

 文章来源地址https://www.toymoban.com/news/detail-469894.html

到了这里,关于用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • JavaScript实现液体流动效果和鼠标交互

    在现代Web应用中,动态效果和交互性已经成为了不可或缺的元素。在这篇博客中,我们将使用JavaScript创建一个液体流动效果,并添加鼠标交互功能,让用户能够与页面进行互动。 创建画布和粒子 首先,我们需要创建一个画布元素,用于绘制我们的液体流动效果。在HTML中添加

    2024年02月13日
    浏览(34)
  • 【HTML | CSS | JAVASCRIPT】一款可交互的响应式登陆注册表单,你确定不来看看嘛(附源码)

    💂 作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发

    2023年04月16日
    浏览(40)
  • 前端 JavaScript 与 HTML 怎么实现交互?

    前端的交互性是通过JavaScript与HTML结合实现的。JavaScript作为一种脚本语言,可以嵌入HTML中,通过对DOM(文档对象模型)的操作,实现与用户的交互。以下将详细介绍前端JavaScript与HTML如何实现交互,包括事件处理、DOM操作、表单交互等方面的内容。 事件是指用户在页面上的动

    2024年01月22日
    浏览(35)
  • HTML5七夕情人节表白网页制作【抖音3D立方体图像库】HTML+CSS+JavaScript html生日快乐祝福网页制作

    这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个TA站在眼前都不敢向前表白。说不出口的话就用短视频告诉

    2024年02月02日
    浏览(36)
  • 情人节程序员用HTML网页表白【520爱心背景3D相册】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript

    这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个TA站在眼前都不敢向前表白。说不出口的话就用短视频告诉

    2024年02月08日
    浏览(60)
  • 基于 HTML5 + WebGL 的太阳系 3D 展示系统

    前言 近年来随着引力波的发现、黑洞照片的拍摄、火星上存在水的证据发现等科学上的突破,以及文学影视作品中诸如《三体》、《流浪地球》、《星际穿越》等的传播普及,宇宙空间中那些原本遥不可及的事物离我们越来越近,人们对未知文明的关注和对宇宙空间的好奇达

    2024年02月20日
    浏览(25)
  • 纯css实现3D鼠标跟随倾斜

    老规矩先上图 为什么今天会想起来整这个呢?这是因为和我朋友吵架, 就是关于这个效果的,就是这个 卡片懸停毛玻璃效果, 我朋友认为纯css也能写, 我则坦言他就是在放狗屁,这种跟随鼠标的3D效果要怎么可能能用纯css写, 然后吵着吵着发现,欸,好像真能用css写哦,我以前还写过这

    2024年02月08日
    浏览(38)
  • html+css+js实现小红点跟随鼠标移动

    2024年02月06日
    浏览(47)
  • HTML,CSS实现鼠标划过头像,头像突出变大(附源码)

    话不多说,先上代码 先看原图: 再看 鼠标放上去后的图: 是不是明显感觉到 人物头像突出了一些,而且还增加了阴影部分的效果呢? 直接上代码!!! 大功告成,如上代码,就是鼠标滑过后,头像或图片突出的代码,快去试试吧!

    2024年02月08日
    浏览(35)
  • 前端:运用HTML+CSS+JavaScript实现拼图游戏

    前一段时间突然来了一个想法,就是运用前端知识实现一个拼图游戏,但是不知道具体怎样实现。今天,想到既然实现不了现实中我们看到的那种拼块,那么就用正方形来代替吧! 效果如下: 想到就是当小的图片块放到合适的位置上时,表示拼图完成。 1. 前端布局 运用cs

    2024年02月08日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包