原生js封装轮播图

时间:2023-03-09 06:43:54
原生js封装轮播图

  个人实际开发中用到的效果问题总结出来便于自己以后开发查看调用,如果也适用其他人请随意拿走勿喷就行!

  原生js对于思路要求比较高,在js代码我都写有备注,足够理解并使用,即使是小白或者刚入行的程序员也比叫好理解,其轮播图只是一个简单的效果,缺点没有写动画效果看起来比较生硬,优点简单好学,容易理解,非常实用

  轮播图介绍 : 三张图片,图片下方有对应图片数量的三个指示点,左右有切换指示,左右指示可要可不要

HTML代码

<div id="mlBox">
<div id="mlImg">
<img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=511087584,1746612192&fm=26&gp=0.jpg" alt="" id="mlShow">
<img src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2251986177,3999926444&fm=26&gp=0.jpg" alt="">
<img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2929314891,994527773&fm=26&gp=0.jpg" alt="">
</div>
<p id="mlSpan">
<span id="mlOn"></span>
<span></span>
<span></span>
</p>
<div id="mlLeft">
<img src="data:image/mlLeft.png" alt="">
</div>
<div id="mlRight">
<img src="data:image/mlRight.png" alt="">
</div>
</div>

CSS代码

<style>
#mlBox{
width: 600px;
height: 500px;
position: relative;
margin: 50px auto;
border: 1px #ececec solid;
}
#mlImg{
width: 600px;
height: 500px;
}
#mlImg img{
width: 600px;
height: 500px;
display: none;
}
#mlSpan{
width: auto;
height: 10px;
position: absolute;
left: %;
bottom: 20px;
}
#mlSpan span{
display: block;
float: left;
width: 10px;
height: 10px;
background: cornflowerblue;
border-radius: %;
margin: 2px;
z-index: ;
}
#mlImg #mlShow{
display: block;
}
#mlSpan #mlOn{
background: chartreuse;
}
#mlLeft{
width: 30px;
height: 30px;
background: rgba(,,,0.7);
position: absolute;
left: ;
top: %;
display: none;
}
#mlLeft img{
width: 30px;
height: 30px;
display: block;
}
#mlRight img{
width: 30px;
height: 30px;
display: block;
}
#mlRight{
width: 30px;
height: 30px;
background: rgba(,,,0.7);
position: absolute;
right: ;
top: %;
display: none;
}
</style>

JS代码

<script>
ml(true); //调用ml函数 注:传参是否需要左右指示 默认false
function ml(indicator) {
var oMlBox = document.getElementById('mlBox'); //获取id:mlBox
var oMlImg = document.getElementById('mlImg'); //获取id:mlImg
var oMlSpan = document.getElementById('mlSpan'); //获取id:mlSpan
var aSpan = oMlSpan.getElementsByTagName('span'); //获取id:mlSpan里面的span标签
var aImg = oMlImg.getElementsByTagName('img'); //获取id:mlImg里面的img标签
var oMlLeft = document.getElementById('mlLeft'); //获取id:mlLeft
var oMlRight = document.getElementById('mlRight'); //获取id:mlRight
var u = ; //当前照片位置
var shut = null; //定时器的名字
function f1() {
for (var i = ; i < aSpan.length; i++) { //循环id:mlSpan里面的span标签
aSpan[i].id = ''; //让span标签的id等于空
aImg[i].id = ''; //让id:mlImg里面img标签id等空
}
aSpan[u].id = 'mlOn'; //当前位置的span标签id等于mlOn
aImg[u].id = 'mlShow'; //当前位置的img标签id等于mlShow
}
for (var f = ; f < aSpan.length; f++) { //循环id:mlSpan里面的span标签
aSpan[f].index = f; //span标签第f个的index等于f
aSpan[f].onclick = function () { //点击span标签 注:照片下面的三个点
u = this.index; //当前位置等于当前span标签index的位置
f1(); //调用f1函数
}
}
oMlBox.onmousemove = function () { //鼠标悬浮id:mlBox
clearInterval(shut); //关闭定时器
if (indicator) { //是否显示左右指示 注:调用ml函数传参
oMlLeft.style.display = 'block'; //显示左指示
oMlRight.style.display = 'block'; //显示右指示
oMlRight.onclick = function () { //点击右指示
u++; //当前位置加一
if (u >= aImg.length) { //当前位置大于照片的数量就等于0
u = ;
}
f1(); //调用f1函数
};
oMlLeft.onclick = function () { //点击左指示
u--; //当前位置减一
if (u < ) { //当前位置小于0时就让当前位置等于照片数量减一
u = aImg.length - ; //注:因为计算机从零开始数所以要减一
}
f1(); //调用f1函数
};
}else{
oMlLeft.style.display = 'none'; //左指示消失
oMlRight.style.display = 'none'; //右指示消失
}
};
oMlBox.onmouseout = function () { //当鼠标移出id:mlBox
f2(); //调用f2函数
oMlLeft.style.display = 'none'; //左指示消失
oMlRight.style.display = 'none'; //右指示消失
};
function f2(){
shut = setInterval(function () { //定时器
u++; //每3秒当前位置加一
if (u >= aImg.length) { //当前位置大于等于照片的数量当前位置等于0
u = ;
}
f1(); //调用f1函数
},);
}
f2(); //调用f2函数
}
</script>