JavaScript轮播图学习和例题

简介: 轮播图是指在一个模块或者窗口,通过鼠标点击或手指滑动后,可以看到多张图片。这些图片统称为轮播图,这个模块叫做轮播模块。轮播图常见于电商类、资讯类应用、功能首页、功能模块主页面。下图截自京东的购物页面。

某购物网站的轮播图

4a4a7d40235eef1e284c1546e604895.jpg

虽然现在轮播图的主流做法是用swiper来实现,但是轮播图是js学习里面很经典的案例之一,了解和学习轮播图的原理和实现,对于js的代码理解有很大的帮助。

题目要求

26f2a3769baa2b929e1dbc03296e26a.jpg

html代码

<!DOCTYPE html><html><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><title>第三题-无缝轮播</title><linkrel="stylesheet"href=""><linkrel="stylesheet"type="text/css"href="css/lunbo.css"></head><body><divclass="banner"id="banner"><ulclass="clear"style="left:-100%"><li><imgsrc="img/index-banner3.jpg"></li><li><imgsrc="img/index-banner1.jpg"></li><li><imgsrc="img/index-banner2.jpg"></li><li><imgsrc="img/index-banner3.jpg"></li><li><imgsrc="img/index-banner1.jpg"></li></ul><divid="left"><divclass="s1"></div></div><divid="right"><divclass="s2"></div></div><divid="pageNav"></div></div><scriptsrc="js/index.js"></script></body></html>

css代码

body,h1,h2,h3,h4,h5,h6,p,ul,ol,dd,dl{
margin:0;
padding:0;
}
ul,ol{
list-style:none;
}
img{
display:block;
}
.clear:after{
content:"";
display:block;
clear:both;
}
.banner{
position:relative;
width:100%;
overflow:hidden;
}
.bannerul{
position:relative;
width:500%;
}
.bannerulli{
width:20%;
float:left;
}
.bannerulliimg{
width:100%;
}
#left,#right{
position:absolute;
top:50%;
margin-top:-25px;
width: 50px;
height:50px;
cursor:pointer;
background-color: rgba(0,0,0,0.4);
}
.s1{
position: absolute;
top:12px;
right: 12px;
display: block;
width: 20px;
height:20px;
border-top:4pxsolidwhite;
border-right:4pxsolidwhite;
transform: rotate(-135deg);
}
.s2{
position: absolute;
top:12px;
right: 12px;
display: block;
width: 20px;
height:20px;
border-top:4pxsolidwhite;
border-right:4pxsolidwhite;
transform: rotate(45deg);
}
#left{
left:0;
}
#right{
right:0;
}
#left:hover,#right:hover{
background-color: rgba(0,0,0,0.8);
}
#pageNav{
position: absolute;
bottom:20px;
left:50%;
transform:translateX(-50%);
}
#pageNava{
display:inline-block;
margin:05px;
width:15px;
height:15px;
background-color: #fff;
border-radius:50%;
}
#pageNava.cur{
background-color: orange;
}

js代码

// 获取元素//(1)根据标签获取元素varbanner=document.getElementById("banner"),
// ul=banner.____(1)______("ul")[0],ul=banner.getElementsByTagName("ul")[0],
// li=ul.____(1)______("li"),li=ul.getElementsByTagName("li"),
leftBtn=document.getElementById("left"),
rightBtn=document.getElementById("right"),
pageNav=document.getElementById("pageNav"),
index=0,
timer=null,
animate=false;
// 追加小圆点for(vari=0;i<li.length-2;i++){
//创建元素// var pageA=____(2)______("a");varpageA=document.createElement("a");
if(i==0){
//设置类名// pageA.___(3)____="cur";pageA.className="cur";
}
//追加节点// pageNav.____(4)___(pageA);//pageNav.append(pageA);pageNav.appendChild(pageA);
}
// 给小圆点绑定点击事件// var aBtn=pageNav.____(1)______("a");varaBtn=pageNav.getElementsByTagName("a");
for(varj=0;j<aBtn.length;j++){
//记录索引值// _____(5)_____;aBtn[j].index=j;
aBtn[j].onclick=function(){
if(animate){
return        }
//计算偏移量// var offset=___(6)_______;varoffset=(this.index-index) *-100;
//传参-当前点击对象的索引值// btnShow(___(7)____);btnShow(this.index);
imgShow(offset);
index=this.index;
    }
}
//  小圆点点亮functionbtnShow(num){
for(vari=0;i<aBtn.length;i++){
// aBtn[i].___(3)____="";aBtn[i].className="";
    }
// aBtn[num].___(3)____="cur";aBtn[num].className="cur";
}
//  切换图functionimgShow(offset){
animate=true;
varspeed=offset/10;
varnewLeft=parseInt(ul.style.left)+offset;
vargo=function(){
if(speed<0&&parseInt(ul.style.left)>newLeft||speed>0&&parseInt(ul.style.left)<newLeft){
ul.style.left=parseInt(ul.style.left)+speed+"%";
//延时计时器// ___(8)____(go,50);setTimeout(go,50);
        }else{
ul.style.left=(index+1)*(-100)+"%";
animate=false;
        }
    }
go();
}
// 给左右箭头绑定点击事件leftBtn.onclick=function(){
if(animate){
return    }
index--;
if(index<0){
index=aBtn.length-1;
    }
btnShow(index);
imgShow(100);
}
rightBtn.onclick=function(){
if(animate){
return    }
index++;
if(index==aBtn.length){
index=0;
    }
btnShow(index);
imgShow(-100);
}
// 自动轮播functionlunbo(){
rightBtn.onclick();
}
timer=setInterval(lunbo,3000);
// 鼠标经过Banner区域清除计时器banner.onmouseover=function(){
// ____(9)_______;clearInterval(timer);
}
// 鼠标离开继续自动轮播// banner.____(10)____=function(){banner.onmouseout=function(){
console.log(1);
timer=setInterval(lunbo,3000);
}

题目解析

第一题 根据标签获取元素可以知道使用getElementsByTagName() 方法

getElementsByTagName() 方法可返回带有指定标签名的对象的集合。


第二题 创建元素用createElement() 方法,不要漏了document

createElement() 方法通过指定名称创建一个元素

image.png

第三题 设置类名直接用className()

className 属性设置或返回元素的 class 属性。

image.png

第四题 追加节点用appendChild() 或append()都可以

appendChild() 方法可向节点的子节点列表的末尾添加新的子节点。

image.png

append() 方法在被选元素的结尾(仍然在内部)插入指定内容。(多用于jQuery)

image.png

第五至七题

我觉得是这道题的一个难点,要充分理解代码的索引值和轮播图图片移动时的偏移量。

获取记录索引值先要给数组中每一个元素添加索引(.index),区分index和this.index的含义,通过阅读代码,求出offset偏移量的值。


第八题 、第九题定时器方法

设置setTimeout()方法

image.png

鼠标经过Banner区域清除计时器,直接使用clearInterval()方法

image.png

第十题 鼠标离开继续自动轮播

  • 上面代码出现了.onmouseover的事件,我们应该可以想到配套的onmouseout()事件
  • 需要注意的是区别onmouseover、onmouseout和onmouseenter、onmouseleave的不同之处
  • onmouseover、onmouseout和onmouseenter、onmouseleave的区别对比
  • onmouseover和onmouseout:在鼠标指针(移动到/移出)指定的对象时发生,支持冒泡,含子元素区域,鼠标经过时自身或子元素都触发事件,每经过一次都触发该事件。
  • onmouseenter和onmouseleave:在鼠标(移入/移出)元素时触发(只触发一次),不支持冒泡,不包含子元素的区域(移动到其子元素身上不会触发事件)

运行效果

https://ucc.alicdn.com/images/user-upload-01/51368848aafb40a783857560ffda6d15.gif

目录
相关文章
|
2月前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
72 3
|
11天前
|
存储 JavaScript 前端开发
JavaScript学习第一章
本文档介绍了JavaScript的基础知识,包括其在网页中的作用、如何通过JavaScript动态设置HTML元素的CSS属性,以及JavaScript中的变量类型(`var`、`let`、`const`)和数据类型(基本数据类型与引用数据类型)。通过实例代码详细解释了JavaScript的核心概念,适合初学者入门学习。
42 1
|
2月前
|
JavaScript
js学习--制作猜数字
js学习--制作猜数字
38 4
js学习--制作猜数字
|
2月前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
48 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
3月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
3月前
|
JavaScript 前端开发 API
紧跟月影大佬的步伐,一起来学习如何写好JS(上)
该文章跟随月影老师的指导,探讨了编写优质JavaScript代码的三大原则:各司其职、组件封装与过程抽象,通过具体示例讲解了如何在实际开发中应用这些原则以提高代码质量和可维护性。
紧跟月影大佬的步伐,一起来学习如何写好JS(上)
|
2月前
|
前端开发
js-基础轮播图制作
js-基础轮播图制作
29 7
|
3月前
|
JavaScript 前端开发
js轮播图练习
文章介绍了如何使用HTML、CSS和JavaScript创建一个简单的轮播图效果。通过`img`标签展示图片,并通过点击下方的点(`span`标签)切换图片。文章提供了完整的HTML结构、CSS样式和JavaScript代码,以及图片的展示和轮播图的效果图。
js轮播图练习
|
2月前
|
JavaScript
js学习--制作选项卡
js学习--制作选项卡
38 4
|
2月前
|
JavaScript
js学习--商品列表商品详情
js学习--商品列表商品详情
20 2