前端-js:轮播图

news/2024/9/23 7:03:43 标签: 前端, javascript, 开发语言

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

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() {
            // 获取轮播的容器container
            var 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) +offset
                var 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=0
            left_li.onclick=function(){
                if(flag==0){
                    change(800)
                    index--;
                    if(index<0){
                        index=4
                    }
                    highlight()

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

                    flag=1
                    setTimeout(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+1
                if(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_index
                highlight()

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.niftyadmin.cn/n/5671608.html

相关文章

关于ollama 在mac的部署问题

安装 官网链接 直接按需求下载即可 默认模型下载地址 macOS: ~/.ollama/models Linux: /usr/share/ollama/.ollama/models Windows: C:\Users<username>.ollama\models 根据需要的平台设置相应的环境变量&#xff1a; OLLAMA_MODELS 如Mac 设置 &#xff5e;/.zshrc …

爬虫 ----hook

目录 定义&#xff1a; 了解什么是hook? 举例 hook XHR请求 XMLHttpRequest 案例地址&#xff1a; Interceptors-拦截器 HOOK cookie操作 cookie 示范 常见的hook代码总结 1.Hook Cookie 2.Hook Header 3.Hook URL 4.Hook JSON.stringify 5.Hook JSON.parse 6.Ho…

速盾:高防cdn防御的时候会封ip吗?

高防CDN&#xff08;Content Delivery Network&#xff09;是一种用于提供网站或应用程序防护和内容分发的服务。它通过将内容分发到全球多个服务器上&#xff0c;帮助用户提高网站的访问速度和可用性&#xff0c;并提供强大的防护功能&#xff0c;包括防DDoS攻击、Web应用程序…

YOLOv9改进,YOLOv9主干网络替换为RepViT (CVPR 2024,清华提出,独家首发),助力涨点

摘要 轻量级视觉变换器(ViTs)在资源受限的移动设备上表现出优越的性能和较低的延迟,相比之下轻量级卷积神经网络(CNNs)稍显逊色。研究人员发现了许多轻量级 ViTs 和轻量级 CNNs 之间的结构联系。然而,它们在块结构、宏观和微观设计上的显著架构差异尚未得到充分研究。在…

【记录】Excel|不允许的操作:合并或隐藏单元格出现的问题列表及解决方案

人话说在前&#xff1a;这篇的内容是2022年5月写的&#xff0c;当时碰到了要批量处理数据的情况&#xff0c;但是又不知道数据为啥一直报错报错报错&#xff0c;说不允许我操作&#xff0c;最终发现是因为存在隐藏的列或行&#xff0c;于是就很无语地写了博客&#xff0c;但内容…

docker的核心概念整理:docker-compose

docker-compose 理解一个服务&#xff0c;我们尝试将自己代入&#xff0c;开发者的角色去思考 这个服务&#xff0c;为什么叫这个名字&#xff1f; docker是什么意思&#xff1f; 英文的意思是码头工人 码头工人的主要工作之一 是把货物搬至集装箱&#xff0c; 进而货轮…

Python办公自动化教程(003):PDF的加密

【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…

【力扣 | SQL题 | 每日三题】力扣182

1. 力扣182&#xff1a;查找重复的电子邮箱 1.1 题目&#xff1a; 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该表的主键&#xff08;具有唯…