前端练习小项目 —— 让图片变得更 “色”

        前言:相信读者在学习完了HTML、CSS和JavaScript之后已经想要迫不及待的想找一个小型的项目来练练手,那么这篇文章就正好能满足你的 “需求”。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

在开始学习之前,先让我们看一下最终的效果:

——看完了上述效果之后,现在让我们开始制作吧!

1.HTML代码

        再开始进行效果制作之前,先让我们将HTML代码的骨架搭建好,以下为其HTML代码:

<body><div class="shell"> <!-- 外部容器,用于包裹内部的盒子 --><div class="box" id="box-a"> <!-- 第一个盒子,ID 为 box-a --><img src="./1.jpg" alt=""> <!-- 图片,src 指向本地的 1.jpg --></div><div class="box" id="box-b"> <!-- 第二个盒子,ID 为 box-b --><img src="./1.jpg" alt=""> <!-- 图片,src 指向本地的 1.jpg --></div><div class="box" id="box-c"> <!-- 第三个盒子,ID 为 box-c --><img src="./1.jpg" alt=""> <!-- 图片,src 指向本地的 1.jpg --></div></div>
</body>

在上述的代码中,我们可以看到:

  1. 外部容器<div class="shell">,用于包裹内部的盒子。

  2. 盒子1<div class="box" id="box-a">,包含一张图片。

  3. 盒子2<div class="box" id="box-b">,同样包含一张图片。

  4. 盒子3<div class="box" id="box-c">,也包含一张图片。

  5. 图片来源:每个盒子中的图片均指向本地文件1.jpg

        这样,通过上述的解释之后,我们对其的HTML代码也就进一步加深了。

2.css代码

        当我们编写完了HTML代码之后,我们就可以对其进行一些效果上的修饰了!以下为CSS代码:

body {background: radial-gradient(circle farthest-side at center bottom,crimson, #003087 130%); /* 背景为径向渐变,从鲜红色到深蓝色 */overflow: hidden; /* 隐藏超出边界的内容 */display: flex; /* 使用弹性布局 */justify-content: center; /* 水平居中对齐内容 */align-items: center; /* 垂直居中对齐内容 */height: 100vh; /* 高度为视口高度的 100% */
}.shell {height: 260px; /* 容器高度 */width: 500px; /* 容器宽度 */
}.box {filter: grayscale(40%); /* 应用 40% 的灰度滤镜 */
}.box img {position: absolute; /* 绝对定位 */opacity: 0.4; /* 图片透明度为 40% */margin: auto; /* 自动外边距 */width: 100%; /* 图片宽度为 100% */
}

解释:

  1. 全屏背景:使用径向渐变,从鲜红色到深蓝色,营造视觉层次感。

  2. 居中布局body 使用弹性布局,使内容在水平和垂直方向上居中。

  3. 固定容器.shell 设置固定的高度(260px)和宽度(500px)。

  4. 灰度效果.box 应用 40% 的灰度滤镜,使内容呈现灰色调。

  5. 透明图片.box img 的透明度设置为 40%,增加柔和视觉效果

        通过上述的总理之后,这样我们就对CSS代码有了一定的理解了!

3.JavaScript代码

        再编写完了HTML和CSS代码之后,再让我们对其交互的效果进行完善,以下为JavaScript代码:

导入文件:

<!-- 导入jquery -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<!-- 导入动画库 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.5/TweenMax.min.js"></script>

交互的编写:

<script>/* 获取元素 */let $body = $("body"), // 获取 body 元素$heroA = $("#box-a img"), // 获取盒子 A 中的图片$heroB = $("#box-b img"), // 获取盒子 B 中的图片$heroC = $("#box-c img"); // 获取盒子 C 中的图片// 设置 transformStyle 属性为 'preserve-3d',使3D效果得以保留TweenMax.set($heroA, { transformStyle: 'preserve-3d' });TweenMax.set($heroB, { transformStyle: 'preserve-3d' });TweenMax.set($heroC, { transformStyle: 'preserve-3d' });/* 鼠标移动事件 */$body.mousemove(function (e) {/* 计算鼠标在页面中的位置 */let sxPos = e.pageX / $body.width() * 300 - 50; // 计算鼠标的 X 轴位置let syPos = e.pageY / $body.height() * 300 - 50; // 计算鼠标的 Y 轴位置console.log("x:" + sxPos + ", y:" + syPos); // 输出鼠标位置/* 使用 TweenMax 库设置元素的动画效果 */TweenMax.to($heroA, 1, { // 动画到盒子 ArotationY: 0.05 * sxPos, rotationX: 0.20 * syPos,rotationZ: '-0.1', transformPerspective: 500,});TweenMax.to($heroB, 1, { // 动画到盒子 BrotationY: 0.10 * sxPos,rotationX: 0.15 * syPos, rotationZ: 0, transformPerspective: 500,});TweenMax.to($heroC, 1, { // 动画到盒子 CrotationY: 0.15 * sxPos,rotationX: 0.10 * syPos, rotationZ: 0.10, transformPerspective: 500,});});
</script>

这里我们再对上述代码进行解释一下,便于读者的理解:

  1. 获取 DOM 元素

    • 使用 jQuery 获取 body 和每个盒子内的图片元素。

  2. 设置 3D 效果

    • 使用 TweenMax 设置每个图片的 transformStyle 属性为 'preserve-3d',以保留 3D 效果。

  3. 鼠标移动事件

    • body 添加鼠标移动事件,捕捉鼠标位置。

  4. 计算鼠标位置

    • 根据鼠标在页面中的 X 和 Y 坐标计算出相应的偏移量。

  5. 动画效果

    • 使用 TweenMax.to 方法对每个盒子的图片应用旋转动画,旋转量根据鼠标位置动态变化。

  6. 动画持续时间

    • 每个动画持续 1 秒,添加了透视效果。

希望读者可以根据上述的代码注释和下面的解释对JavaScript样式进行理解!

——至此,我们就完成了这个案例的编写了,最后我们附上全部代码以及最终的效果图:

代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>秋刀鱼不做梦</title><link rel="stylesheet" href="./index.css"><style>body {background: radial-gradient(circle farthest-side at center bottom,crimson, #003087 130%);overflow: hidden;display: flex;justify-content: center;align-items: center;height: 100vh;}.shell {height: 260px;width: 500px;}.box {filter: grayscale(40%);}.box img {position: absolute;opacity: 0.4;margin: auto;width: 100%;}</style>
</head><body><div class="shell"><div class="box" id="box-a"><img src="./1.jpg" alt=""></div><div class="box" id="box-b"><img src="./1.jpg" alt=""></div><div class="box" id="box-c"><img src="./1.jpg" alt=""></div></div>
</body><!-- 导入jquery -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<!-- 导入动画库 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.18.5/TweenMax.min.js"></script><script>/* 获取元素*/let $body = $("body"),$heroA = $("#box-a img"),$heroB = $("#box-b img"),$heroC = $("#box-c img");// 设置 transformStyle 属性为 'preserve-3d'TweenMax.set($heroA, { transformStyle: 'preserve-3d' });TweenMax.set($heroB, { transformStyle: 'preserve-3d' });TweenMax.set($heroC, { transformStyle: 'preserve-3d' });/* 鼠标移动事件 */$body.mousemove(function (e) {/* 计算鼠标在页面中的位置 */let sxPos = e.pageX / $body.width() * 300 - 50;let syPos = e.pageY / $body.height() * 300 - 50;console.log("x:" + sxPos + ", y:" + syPos);/* 使用TweenMax库设置元素的动画效果 */TweenMax.to($heroA, 1, {rotationY: 0.05 * sxPos, rotationX: 0.20 * syPos,rotationZ: '-0.1', transformPerspective: 500,});TweenMax.to($heroB, 1, {rotationY: 0.10 * sxPos,rotationX: 0.15 * syPos, rotationZ: 0, transformPerspective: 500,});TweenMax.to($heroC, 1, {rotationY: 0.15 * sxPos,rotationX: 0.10 * syPos, rotationZ: 0.10, transformPerspective: 500,});});
</script></html>

效果图:


以上就是本篇文章的全部内容了!!!

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

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

相关文章

基于springboot+小程序的智慧物业平台管理系统(物业1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 智慧物业平台管理系统按照操作主体分为管理员和用户。 1、管理员的功能包括报修管理、投诉管理管理、车位管理、车位订单管理、字典管理、房屋管理、公告管理、缴费管理、维修指派管理、…

Mysql(六) --- 聚合函数,分组和联合查询

文章目录 前言1.聚合函数1.1.常用的函数1.2.COUNT()1.3.SUM()1.4.AVG()1.5.MIN()、MAX() 2.GROUP BY 分组查询2.1.语法2.2.示例2.3.HAVING 子句 3.联合查询3.1.为什么要进行联合查询3.2.那么是如何进行联合查询的3.3.示例&#xff1a;一个完整的联合查询的过程3.4.内连接3.5.外…

C++(异常)

目录 C语言传统的处理错误的方式 传统的错误处理机制 C异常概念 异常的使用 异常的抛出和捕获 异常的抛出和匹配原则 在函数调用链中异常栈展开匹配原则 异常的重新抛出 异常安全 异常规范 自定义异常体系 C标准库的异常体系 异常的优缺点 C异常的优点 C异常的缺…

「自动化测试」Selenium 的使用

使用 Selenium 需要先导入相关依赖 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency><dependency><groupId>io.gith…

【M365运维】在SPO文档库里删除文档时,遇到文档被签出无法删除。

【问题】SPO的存储空间剩的不多了&#xff0c;在清理文档库时&#xff0c;遇到有些文档被签出但用户已经离职&#xff0c;删除文件时报错。 【解决】翻SPO的设置时&#xff0c;看到有“管理没有已签入版本的文件”&#xff0c;在里面获取文件的所有权之后就可以删除了。 具体…

【树莓派5B】IO串口通信使用

超级简单的串口使用 前言零、检查准备&#xff08;可略&#xff09;0.1 查看UART引脚&#xff1a;0.2 扩展一下引脚查看的方法 一、配置准备1.1 检查端口配置1.2 查看串口映射1.3 下载minicom串口调试工具1.4 通过命令获取串口上的数据 二、python的serial进行收发测试总结 前言…

sqli-labs靶场第二关less-2

sqli-labs靶场第二关less-2 本次测试在虚拟机搭建靶场&#xff0c;从主机测试 1、输入?id1和?id2发现有不同的页面回显 2、判断注入类型 http://192.168.128.3/sq/Less-2/?id1’ 从回显判断多一个‘ &#xff0c;预测可能是数字型注入 输入 http://192.168.128.3/sq/Less…

Study-Oracle-10-ORALCE19C-RAC集群维护

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、RAC的逻辑架构与进程 1、RAC 与单实例进程的对比 2、RAC相关进程功能 3、在主机查看RAC后台进程 快捷键设置 alias sqlplus=rlwrap sqlplus alias rman=rlwrap rman alias crsctl=/u01/app…

使用springCache实现缓存

简介 这个springCache貌似jdk8或者以上才可以 cache最好加在controller层&#xff0c;毕竟返回给前端的数据&#xff0c;在这一步才是最完整的&#xff0c;缓存controller的数据才有意义 配置 导入依赖 <dependency><groupId>org.springframework.boot</groupId…

基于Python的美术馆预约系统【附源码】

效果如下&#xff1a; 系统首页界面 系统注册页面 美术馆详细页面 公告信息详细页面 后台登录界面 管理员主界面 美术馆管理界面 预约参观管理界面 研究背景 随着文化娱乐活动的日益丰富&#xff0c;美术馆作为展示艺术作品、传播文化的重要场所&#xff0c;其管理和服务模式…

go语言protoc的详细用法与例子

一. 原来的项目结构 二. 选择源proto文件及其目录&目的proto文件及其目录 在E:\code\go_test\simple_demo\api 文件夹下&#xff0c;递归创建\snapshot\helloworld\v1\ad.pb.go E:\code\go_test\simple_demo> protoc --go_outpathssource_relative:./api .\snapshot\h…

Dolma:包含三万亿Token的语言模型预训练研究开放语料库

前言 原论文&#xff1a;Dolma: an Open Corpus of Three Trillion Tokens for Language Model Pretraining Research 摘要 关于训练当前最佳性能语言模型的预训练语料库的信息很少被讨论——商业模型很少详细说明它们的数据&#xff0c;即使是开源模型也往往在没有训练数据…

Ubuntu开机进入紧急模式处理

文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动&#xff0c;自动进入紧急模式&#xff08;You are in emergency mode&#xff09;。具体如下所示&#xff1a; 二、解决办法 按CtrlD进…

《机器学习》周志华-CH10(降维与度量学习)

10.1k近邻学习 k k k近邻(k-Nearest Neighbor,简称kNN)&#xff0c;监督学习。 工作机制&#xff1a;给定测试样本&#xff0c;基于某种距离度量找出训练集中与其最靠近的 k k k个训练样本&#xff0c;基于这些”邻居“预测。 { 分类任务&#xff1a;选择”投票法“。 k 个样本…

MySQL之复合查询与内外连接

目录 一、多表查询 二、自连接 三、子查询 四、合并查询 五、表的内连接和外连接 1、内连接 2、外连接 前面我们讲解的mysql表的查询都是对一张表进行查询&#xff0c;即数据的查询都是在某一时刻对一个表进行操作的。而在实际开发中&#xff0c;我们往往还需要对多个表…

如何使用MATLAB代码生成器生成ADRC跟踪微分器(TD) PLC源代码(SCL)

ADRC线性跟踪微分器TD详细测试 ADRC线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)-CSDN博客文章浏览阅读383次。ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和…

Bolt.new:终极自动化编程工具

兄弟们&#xff0c;终极写代码工具来了—— Bolt.new&#xff01;全方位的编程支持&#xff1a; StackBlitz 推出了 Bolt․new&#xff0c;这是一款结合了 AI 与 WebContainers 技术的强大开发平台&#xff0c;允许用户快速搭建并开发各种类型的全栈应用。 它的主要特点是无需…

Anaconda的安装与环境设置

文章目录 一、Anaconda介绍二、Anaconda环境搭建1. 下载Anaconda(1)官网下载(2)清华大学镜像 2. 安装Anaconda3.配置环境变量4.检验conda是否安装成功5.更改镜像源6.若菜单栏没有conda prompt 三、虚拟环境1.创建、查看、删除虚拟环境2.激活、退出虚拟环境 四、CUDA、Pytorch、…

JS 入门

文章目录 JS 入门一、JS 概述1、JS 特点2、JS 组成3、JS 初体验4、HTML引入JS 二、JS 基础语法1、变量声明2、基本数据类型3、引用数据类型1&#xff09;数组2&#xff09;对象3&#xff09;函数4&#xff09;null 4、运算符5、条件判断6、循环语句 三、JS 函数0、JS 函数特点1…

上传文件失败,请检查阿里云配置信息:[The specified bucket is not valid.

-- 十一假期结束 -- 去年今日此门中&#xff0c;人面挑花相应红。 -- 人面不知何处去&#xff0c;桃花依旧笑春风。