中秋特辑——3D动态礼盒贺卡(可监听鼠标移动)

news2025/1/22 16:08:22

前言

在这里插入图片描述
「作者主页」:雪碧有白泡泡
「个人网站」:雪碧的个人网站
「推荐专栏」

java一站式服务
React从入门到精通
前端炫酷代码分享
★ 从0到英雄,vue成神之路★
uniapp-从构建到提升
从0到英雄,vue成神之路
解决算法,一个专栏就够了
架构咱们从0说
★ 数据流通的精妙之道★
★后端进阶之路★

请添加图片描述

文章目录

  • 前言
  • 先上效果
    • 简单预览
  • 核心代码
    • script代码
    • 部分css代码
  • 精彩福利

先上效果

简单预览

在这里插入图片描述

这里可以直接 看查源码内容, 刷新,最后一个是 放大**跳转网页** 点击运行后即可有如下效果,拖动鼠标即可

在这里插入图片描述
可随鼠标移动

核心代码

script代码

<script>
  var top=document.getElementById('top')
  var content=document.getElementById('content')
  var card=document.getElementById('card')
  var imgBox=document.getElementById('imgBox')
  top.addEventListener("click", ()=>{
    addClass(content,'moveOut')
    setTimeout(()=>{
      addClass(card,'showCard')
    },500)
  })
  card.onmouseover=()=>{
    toggleClass(imgBox,'imgBoxAct')
  }
  card.onmouseout=()=>{
    toggleClass(imgBox,'imgBoxAct')
  }
  function hasClass(obj,cls) {  
      return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));  
  };  
  function addClass(obj,cls) {  
      if (!hasClass(obj,cls)) obj.className += " " + cls;  
  }  
  Object.prototype.removeClass = function removeClass(obj,cls) {  
      if (hasClass(obj,cls)) {  
          var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');  
          obj.className = obj.className.replace(reg, ' ');  
      }  
  };  
  function toggleClass(obj,cls){  
      if(this.hasClass(obj,cls)){  
          this.removeClass(obj,cls);  
      }else{  
          this.addClass(obj,cls);  
      }  
  };
</script>

代码解释

  1. top 元素被点击时,给 content 元素添加 moveOut 类,并在 500 毫秒后给 card 元素添加 showCard 类。

  2. 当鼠标移动到 card 元素上时,给 imgBox 元素添加 imgBoxAct 类;当鼠标移出 card 元素时,移除 imgBoxAct 类。

  3. 定义了四个函数:

    • hasClass(obj, cls):判断 obj 元素是否包含 cls 类。

    • addClass(obj, cls):给 obj 元素添加 cls 类。

    • Object.prototype.removeClass:给 obj 元素移除 cls 类。

    • toggleClass(obj, cls):如果 obj 元素包含 cls 类,则移除该类;否则添加该类。
      在这里插入图片描述

部分css代码

这段代码是一个CSS样式表,用于设计一个网页的背景和一个卡片的样式。以下是每个部分的解释:

.bg{
  width: 100vw;
  height: 100vh;
  background:#f39c72;
  padding-top: 140px;
  font-family: "楷体","楷体_GB2312";
}

这段代码定义了一个类名为“bg”的元素,它的宽度和高度分别为视口的宽度和高度,背景颜色为橙色,顶部有一个内边距为140像素的空白区域,字体为“楷体”。

.bg:before{
  background-size:cover;
  background:url(../images/moonCakeBg.png) repeat center;
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  right:0;
  left:0;
  animation:bgMove 10s infinite linear;
}

这段代码定义了一个伪元素,它是“bg”元素的前置元素。它的背景图片是一个月饼的图片,重复平铺,居中对齐。它的位置是绝对定位,占据整个视口,有一个名为“bgMove”的动画,持续时间为10秒,无限循环,线性变化。

.card{
  position:absolute;
  z-index: 4;
  width:350px;
  height:600px;
  left:50%;
  top:50%;
  display: none;
  cursor: pointer;
  transform:translate(-50%,-50%);
  background: url(../images/cardBg2.png)no-repeat;
  background-size:100% 100%;
  transform-style:preserve-3d;
  perspective:1700px;
  background-color:#6375fd;
  box-shadow:inset 300px 0 50px rgba(0,0,0,.5),0 20px 100px rgba(0,0,0,.5);
  transition:1s;
}

这段代码定义了一个类名为“card”的元素,它是一个卡片。它的位置是绝对定位,居中对齐。它的宽度和高度分别为350像素和600像素。它的背景图片是一个蓝色的图片,不重复平铺,居中对齐。它的变换样式是3D保留,透视点距离为1700像素。它的背景颜色是深蓝色,有一个阴影效果。它的过渡效果持续1秒。

.card:hover{
  /* perspective:2000px; */
  box-shadow:inset 20px 0 50px rgba(0,0,0,.5),0 20px 100px rgba(0,0,0,.5);
}

这段代码定义了当鼠标悬停在“card”元素上时的样式。它的阴影效果会变化。

.card .imgBox{
  width:100%;
  height:100%;
  position:relative;
  transform-origin:left;
  background: url(../images/ByteDance.png)no-repeat;
  background-size:100% 100%;  
  transition:1s;
}
.imgBoxAct{
  background: url(../images/cardBg1.png)no-repeat!important;
  background-size:100% 100%!important; 
  
}
.card:hover .imgBox{
  transform:rotatey(-135deg);
}

这段代码定义了一个类名为“imgBox”的元素,它是“card”元素的子元素,用于显示卡片的图片。它的宽度和高度分别为100%。它的位置是相对定位。它的变换原点是左侧。不重复平铺,居中对齐。它的过渡效果持续1秒。当鼠标悬停在“card”元素上时,它会旋转135度。此外,还定义了一个类名为“imgBoxAct”的元素,用于显示卡片的背景图片。

.card .details{
  position:absolute;
  top:0;
  left:0;
  box-sizing:border-box;
  z-index:-1;
  transition: all .2s ease-in-out;
  display: flex;
  flex-direction: column;
  justify-content: space-around;
  width: 100%;
  height: 100%;
  padding: 130px 40px 50px;
}
.detailsContent p{
  font-size: 16px;
  line-height: 24px;
  color: #302a28;
}
.card .details:hover{
  transform: scale(1.1);
  text-shadow:10px 40px 50px #6375fd;
}
h3{
  font-size: 24px;
  line-height: 24px;
  color: #2d6da7;
}
p{
  font-size: 14px;
  line-height: 8px;
  color: #2d6da7;

}

这段代码定义了一个类名为“details”的元素,它是“card”元素的子元素,用于显示卡片的详细信息。它的位置是绝对定位,左上角对齐。它的盒模型是border-box。它的z-index为-1,表示它在“card”元素的下方。它的过渡效果持续0.2秒。它的子元素是一个标题和一段文本。当鼠标悬停在“details”元素上时,它会放大1.1倍,并且有一个文本阴影效果。

.showCard{
  display: block!important;
  animation: showCard 1s  linear!important;
  animation-fill-mode:forwards!important;
}
@keyframes bgMove{
  0%{
    background-position:0px 0px;
  }
   100%{
    background-position:200px 298px;
  }
}
@keyframes showCard{
  0%{
    transform:translate(-80%,140%) scale(1);
  }
  70%{
    transform:translate(-10%,-40%) scale(1.4);
  }
   100%{
    transform:translate(-10%,-50%) scale(1.2);
  }
}

这段代码定义了一个类名为“showCard”的元素,用于显示卡片。它的显示方式为块级元素。它有一个名为“showCard”的动画,持续时间为1秒,线性变化。动画结束后,元素的状态将保持在最后一帧。此外,还定义了两个关键帧动画,分别是“bgMove”和“showCard”。其中,“bgMove”用于控制背景图片的移动,“showCard”用于控制卡片的显示效果。
在这里插入图片描述

精彩福利

在这里插入图片描述

点击下方地址进入,里面有送书活动还有百度周边放送
链接地址可以私信我进群哦请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华纳云:如何搭建Nginx服务器做到负载均衡

要搭建Nginx服务器实现负载均衡&#xff0c;您可以使用Nginx作为反向代理来分发客户端请求到多个后端服务器。以下是一个基本的步骤指南&#xff1a; 前提条件&#xff1a; 您需要一台安装有Nginx的服务器。您需要有多台后端服务器&#xff0c;这些服务器将处理客户端请求。 …

centos7 装机遇到的问题

centos7 U盘启动装机 设置完启动项后重启 在菜单界面选择install centos7 按e编辑启动项&#xff0c;修改成如下 --> 之所以这么改是u盘的LABEL超过长度了只能显示到x8这里&#xff0c;nomodeset 是disable 视频驱动比如gpu 开始安装后如果选择的硬盘没有多余的空间了会提…

TikTok的媒体革命:新闻业如何适应短视频时代?

在数字时代&#xff0c;媒体行业一直在不断演变和创新&#xff0c;以适应观众的变化需求和技术的发展。而在这个进化的过程中&#xff0c;短视频应用TikTok已经崭露头角&#xff0c;成为了一个重要的信息传播平台。 这篇文章将深入探讨TikTok如何引领了媒体的一场革命&#xf…

mininum_snap

位置 速度 加速度 角度 jerk 角速度 驱动力 snap 角加速度 推力的导数 凸优化算法 convex optimization 凸优化&#xff08;Convex Optimization&#xff09;是数学和计算机科学领域的一个重要分支&#xff0c;主要研究如何有效地解决凸优化问题。凸优化问题的主要目标是找…

pytest进阶之conftest.py

前言 前面几篇随笔基本上已经了解了pytest 命令使用&#xff0c;收集用例&#xff0c;finxture使用及作用范围&#xff0c;今天简单介绍一下conftest.py文件的作用和实际项目中如是使用此文件&#xff01; 实例场景 首先们思考这样一个问题&#xff1a;如果我们在编写测试用…

AIMS医院手术麻醉信息系统全套源码,自主版权,开箱即用

手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流程&#xff0c;实现麻醉手术过程的信息数字化&#xff0c;自动生成麻…

如何无损压缩视频?这些技巧你一定用得到

在日常生活中&#xff0c;我们常常会遇到视频文件过大、手机或电脑存储空间不足的情况。这时候&#xff0c;我们就需要将这些视频文件的内存进行压缩&#xff0c;以节省空间。但是&#xff0c;一个一个地压缩视频文件显然是不现实的。那么&#xff0c;如何快速批量压缩视频呢&a…

【马蹄集】—— 数论专题:筛法

数论专题 目录 MT2213 质数率MT2214 元素共鸣MT2215 小码哥的喜欢数MT2216 数的自我MT2217 数字游戏 MT2213 质数率 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;256M 题目描述 请求出 [ 1 , n ] \left[1,n\right] [1,n] 范围内质数占比率。…

【word技巧】如何限制word页眉,不被他人修改

我们设置了页眉内容之后&#xff0c;不想其他人修改自己的页眉内容&#xff0c;我们可以设置加密的&#xff0c;设置方法如下&#xff1a; 先将页眉设置好&#xff0c;退出页眉设置之后&#xff0c;我们选择布局功能&#xff0c;点击分隔符 – 连续 设置完之后页面分为上下两节…

基于vue3 的 Echarts图表展示(任务一:用柱状图展示消费额最高的省份)(操作全流程)(图文版)

目录 前言&#xff1a; 操作要求&#xff1a; 操作流程&#xff1a; 一.创建vue项目 1.在vscode上创建vue脚手架工程 二.配置运行环境 2.配置axios(用于访问接口) 和引入echarts包 3.引入需要用到的js包 三.开始实践做题(最后附有完整代码) 1.获取接口数据 2.数据处理 …

博格华纳高压发卡式电机解析

博格华纳的高压发卡式电机具有功率强大、坚固耐用和高性能等特点&#xff0c;采用紧凑型设计&#xff0c;优化的导体绕组结构缩短了电机的尺寸&#xff0c;使其便于在更小的空间内进行安装&#xff0c;并提高了常用区间的工作效率。此外&#xff0c;电机在设计上减少了重稀土元…

Spring Cloud Alibaba Nacos 2.2.3 (4) - 本地源码编译 调试

下载nacos nacos在GitHub上有下载地址&#xff1a;https://github.com/alibaba/nacos/releases&#xff0c;可以选择任意版本下载。 我下载的是2.2.3 版本 导入idea mvn 安装包 1&#xff0c;切换到Terminal ,并且使用command prompt模式 2&#xff0c;执行 mvn -Prelease…

Delaunay三角剖分算法

目录 一. 简介1.1 三角剖分1.2 Delaunay三角剖分 二. Delaunay三角剖分的相关理论2.1 Delaunay三角形和&#xff08;局部&#xff09;Delaunay边的概念2.2 Delaunay引理2.3 翻转边算法&#xff08;flip algorithm&#xff09;2.4 Delaunay三角剖分的最优性质 三. Delaunay三角剖…

缺口的大利润!伦敦银如何使用缺口交易

在伦敦银市场中&#xff0c;我们经常能够看见市场跳空形成缺口&#xff0c;其实&#xff0c;如果利用得当&#xff0c;我们在伦敦银投之中&#xff0c;这些缺口是能够为我们创造盈利机会的&#xff0c;那么下面我们就来讨论一下在伦敦银投之中如何认识这些跳空缺口&#xff0c;…

哪些远程桌面软件适合与团队共享屏幕和文件

远程桌面软件是一种方便团队协作和共享工作的工具。它们能够允许用户通过互联网连接到其他计算机&#xff0c;实现远程访问、共享屏幕和文件、以及协同工作。以下是一些适合与团队共享屏幕和文件的常用远程桌面软件。 1、RayLink RayLink是一款功能强大且易于使用的远程桌面软…

企业微信 API 接口调用教程:图文详解企业微信 API 的使用方法

本文通过 access_token 凭证的方式来讲解怎么调用 企业微信 API&#xff0c;并一步步介绍如何获取企业微信 API 的 corpsecret、corpid、access_token 凭证以及怎么向企业微信的应用发送消息。 企业微信 API 在线地址为&#xff1a;概述 - 企业微信 API &#xff0c;这个在线地…

大型架构设计的演进之路

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 今天我们一起看看大型互联网系统架构的演进之路&#xff0c;主要包含三部分内容。 第一部分是大型互联网系统的特点&#xff0c;分析大型互联网有哪些特点和挑战&#xff0c;它们是现在一些技术和架构方案产生的原因。…

性能测试 —— 性能测试常见的测试指标 !

一、什么是性能测试 先看下百度百科对它的定义&#xff0c;性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 我们可以认为性能测试是&#xff1a;通过在测试环境下对系统或构件的性能进行探测&#xff0c;用以验证在生产环…

网站有反爬机制就爬不了数据?那是你不会【反】反爬

目录 前言 一、什么是代理IP 二、使用代理IP反反爬 1.获取代理IP 2.设置代理IP 3.验证代理IP 4.设置代理池 5.定时更新代理IP 三、反反爬案例 1.分析目标网站 2.爬取目标网站 四、总结 前言 爬虫技术的不断发展&#xff0c;使得许多网站都采取了反爬机制&#xff…

SSL证书如何做到保障网站安全?

当网站显示不安全时&#xff0c;用户会在头脑中产生该网站是否合法的疑问&#xff0c;如果是购物网站或者购物商城&#xff0c;那意味着可能会损失大部分的用户。而SSL证书能有效保障网站的安全性&#xff0c;轻松解决网站不被用户信任的问题。那么&#xff0c;SSL证书究竟是如…