前端-js:轮播图

server/2024/9/23 4:35:23/

学校官网都会有图片轮播,包括自动轮播及手动切换。

1. 原理:

在有限的区域内展示图片。

整个图片部分是一个胶卷 ,当哪个图片在窗口位置展示哪个图片。

自动轮播:每隔一段时间调相对位置。

2. 实现

$1. 放5张图片

<div class="container"><ul class="img_box"><!-- tu3 --><li><img src="img/轮播1.png" alt=""></li><li><img src="img/轮播2.png" alt=""></li><li><img src="img/轮播3.png" alt=""></li><li><img src="img/轮播4.png" alt=""></li><li><img src="img/轮播5.png" alt=""></li><!-- tu1 --></ul><!-- <ul class=""></ul> --></div>

$2. css加样式

1>先把图片调小

 * {padding: 0;margin: 0;/* background-color:rgb(43, 43, 43) ; */}img {width: 100px;}

2> 调内容部分大小

超出的部分隐藏掉(只显示窗口展示的)

.container {width: 800px;height: 350px;background: red;margin: 100px auto ;overflow: hidden;position: relative;/* background-color: rgb(43,43,43); */}

3> 调胶卷

调整图片相对窗口的位置(position:absolute)负数图片往左走

 .container .img_box {width: 5600px;height: 350px;background: pink;display: flex;position: absolute;left: -800px;/* transition: left 1s linear; */}

4> 每个图片的样式

.container .img_box li {width: 800px;height: 350px;background: yellow;list-style: none;}

图片全部展示 

.container .img_box li img {width: 100%;height: 100%;/* object-fit: cover; */}

5> 开启定时器调整图片的位置

位置判断

javascript">window.onload = function() {// 获取轮播的容器containervar container=document.querySelector(".container")var img_box = document.querySelector(".container .img_box")img_box.style.left = "-800px"// 轮播核心代码var change = function(offset) {// var newoffset = parseInt(img_box.style.left) +offset// if (newoffset < -3200) {//     img_box.style.left = "0px"// } else if(newoffset>0){//     img_box.style.left = "-3200px"// }else {//     img_box.style.left = newoffset + "px"// }// 获取图片切换的目标位置var newoffset = parseInt(img_box.style.left) +offsetvar speed=offset/50// 慢慢切换var move=function(){img_box.style.left = parseInt(img_box.style.left)+speed + "px"if(parseInt(img_box.style.left)!=newoffset){setTimeout(move,10)}else{if(parseInt(img_box.style.left)==-4800){img_box.style.left="-800px"}else if(parseInt(img_box.style.left)==0){img_box.style.left="-4800px"}}}move()}

6> 加左右切换的按钮

javascript">var ul=document.createElement("ul")ul.className="btns"var left_li=document.createElement("li")left_li.innerText="<"var right_li=document.createElement("li")right_li.innerText=">"ul.appendChild(left_li)ul.appendChild(right_li)container.appendChild(ul)console.log(ul)

7> 仿连点击

javascript">var flag=0left_li.onclick=function(){if(flag==0){change(800)index--;if(index<0){index=4}highlight()flag=1setTimeout(function(){flag=0},1000)}}right_li.onclick=function(){if(flag==0){change(-800)index++;if(index>4){index=0}highlight()flag=1setTimeout(function(){flag=0},1000)}}

8> 自动轮播

javascript"> var timer=setInterval(right_li.onclick, 4000)

9> 解决手动轮播冲突问题

javascript">container.onmouseenter=function(){clearInterval(timer)}container.onmouseleave=function(){timer=setInterval(right_li.onclick, 4000)}

10> 生成任意切换的按钮

javascript">var dot_ul=document.createElement("ul")dot_ul.className="dots"var img_box_li=document.querySelectorAll(".img_box li")console.log(img_box_li)for(var i=0;i<img_box_li.length;i++){var li=document.createElement("li")console.log(li)li.innerText=i+1if(i==0){li.className="current"}dot_ul.append(li)}container.append(dot_ul)console.log(dot_ul)

11> 任意切换

javascript">var dot_ul_li= document.querySelectorAll(".dots li")//    console.log(dot_ul_li)for(var j=0;j<dot_ul_li.length;j++){dot_ul_li[j].onclick=function(){// alert(1)// 图片切换var new_index=this.innerText-1// alert(index)change((index-new_index)*800)index=new_indexhighlight()

12> 按钮切换

javascript">//    定义一个游标,记录当前点点的索引值var index=0// 按钮样式切换代码var highlight=function(){// 样式切换for(var k=0;k<dot_ul_li.length;k++){if(k==index){dot_ul_li[k].className="current"}else{dot_ul_li[k].className=""}}}

13> 初始化辅助无缝轮播图片

javascript">var last_li=img_box.firstElementChild.cloneNode(true)var  first_li=img_box.lastElementChild.cloneNode(true)img_box.insertBefore(first_li,img_box.firstElementChild)img_box.appendChild(last_li)


http://www.ppmy.cn/server/120623.html

相关文章

深度学习:(六)激活函数的选择与介绍

激活函数 之前使用的 a σ ( z ) a\sigma(z) aσ(z) &#xff0c;其中 σ ( ) \sigma(~) σ( ) 便是激活函数。 在神经网络中&#xff0c;不同层的激活函数可以不同。 在学习中&#xff0c;一般以 g ( z ) g(z) g(z) 来表示激活函数。 为什么需要(线性)激活函数&#xff…

C语言 | Leetcode C语言接雨水II

题目&#xff1a; 题解&#xff1a; typedef struct{int row;int column;int height; } Element;struct Pri_Queue; typedef struct Pri_Queue *P_Pri_Queue; typedef Element Datatype;struct Pri_Queue{int n;Datatype *pri_qu; };/*优先队列插入*/ P_Pri_Queue add_pri_que…

网页与微信小程序:一场轻量化应用的博弈

网页与微信小程序&#xff1a;一场轻量化应用的博弈 在如今的信息时代&#xff0c;移动互联网已然成为主流&#xff0c;而在这一趋势的驱动下&#xff0c;应用形态也在不断演变。微信小程序与传统网页&#xff0c;作为两种不同的应用形态&#xff0c;正如两条并行却又交织的道…

Facebook直播限流是什么原因?是ip地址导致的吗

随着社交媒体和直播行业的蓬勃发展&#xff0c;Facebook直播已成为众多企业和个人进行品牌推广、产品展示和互动交流的重要平台。然而&#xff0c;在享受直播带来的便利与效益的同时&#xff0c;不少用户也面临着直播限流的困扰。本文将探讨Facebook直播限流的原因&#xff0c;…

2.个人电脑部署MySQL,傻瓜式教程带你拥有个人金融数据库!

2.个人电脑部署MySQL&#xff0c;傻瓜式教程带你拥有个人金融数据库&#xff01; ‍ 前边我们提到&#xff0c;比较适合做量化投研的数据库是MySQL&#xff0c;开源免费。所以今天我就写一篇教程来教大家如何在自己的环境中部署MySQL。 在不同的设备或系统中安装MySQL的步骤…

基于51单片机的汽车倒车防撞报警器系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 本课题基于微控制器控制器&#xff0c; 设计一款汽车倒车防撞报警器系统。 要求&#xff1a; 要求&#xff1a;1.配有距离&#xff0c; 用于把车和障碍物之间的距离信号送入控制器。 2.配有报警系…

【Java】线程暂停比拼:wait() 和 sleep()的较量

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持&#xff01; 在Java多线程编程中&#xff0c;合理地控制线程的执行是至关重要的。wait()和sleep()是两个常用的方法&#xff0c;它们都可以用来暂停线程的执行&#xff0c;但它们之间存在着显著的差异。本文将详…

ARM驱动学习之9注册字符类设备

ARM驱动学习之9注册字符类设备 • 分配内存空间函数kmalloc – 分配连续的虚拟地址&#xff0c;用于小内存分配。在include/linux/slab.h文件中。 – 参数1&#xff1a;申请的内存大小(最大128K)&#xff0c; – 参数2&#xff1a;GFP_KERNEL&#xff0c;代表优先权&#xff0…