原生js做一个简单的仿幻灯片放映

目录

效果:

源代码: 

案例中闭包小问题:


效果:

源代码: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/slider.css">
</head>
<body>
    <div class="slider-wrapper">
        <div class="slider">
            <ul class="slider-list">
                <li class="slider-item active">
                    <a href="">
                        <img src="images/1.jpg" alt=""/>
                    </a>
                </li>
                <li class="slider-item">
                    <a href="">
                        <img src="images/2.jpg" alt=""/>
                    </a>
                </li>
                <li class="slider-item">
                    <a href="">
                        <img src="images/3.jpg" alt=""/>
                    </a>
                </li>
                <li class="slider-item">
                    <a href="">
                        <img src="images/4.jpg" alt=""/>
                    </a>
                </li>
                <li class="slider-item">
                    <a href="">
                        <img src="images/5.jpg" alt=""/>
                    </a>
                </li>
                <li class="slider-item">
                    <a href="">
                        <img src="images/6.jpg" alt=""/>
                    </a>
                </li>
            </ul>
        </div>
        <!-- 缩略图 -->
      
        <div class="thumbs">
                <ul class="thumbs-list">
                    <li class="thumbs-item cur">  
                           <!-- 协议限定符,阻止a跳转 -->
                        <a href="javascript:void(false)">
                            <img src="images/1.jpg" alt=""/>
                        </a>
                    </li>
                    <li class="thumbs-item">  
                        <a href="javascript:void(false)">
                            <img src="images/2.jpg" alt=""/>
                        </a>
                    </li>
                    <li class="thumbs-item">  
                        <a href="javascript:void(false)">
                            <img src="images/3.jpg" alt=""/>
                        </a>
                    </li>
                    <li class="thumbs-item">  
                        <a href="javascript:void(false)">
                            <img src="images/4.jpg" alt=""/>
                        </a>
                    </li>
                    <li class="thumbs-item">  
                        <a href="javascript:void(false)">
                            <img src="images/5.jpg" alt=""/>
                        </a>
                    </li>
                   <li class="thumbs-item">  
                        <a href="javascript:void(false)">
                            <img src="images/6.jpg" alt=""/>
                        </a>
                    </li>
                </ul>
        </div>
    </div>
    <script type="text/javascript" src="js/slider.js"></script>
</body>
</html>
*{
    margin: 0;
    padding: 0;
}
ul{
    padding: 0;
    margin: 0;
    list-style: none;
}
a{
    text-decoration: none;
}
/* 图片宽高继承父级盒子 */
img{
    width: 100%;
    height:100%;
}
.slider-wrapper{
    width: 996px;
    height: 480px;
    margin: 50px auto;
    border:1px #000;
}
.slider{
    position: relative;
    float: left;
    width: 840px;
    height: 480px;
}
.slider .slider-item{
    display: none;
    position: absolute;
    top:0;
    left:0;
    height: 480px;
}
.slider .slider-item.active{
    display: block;
}
.thumbs{
    float: left;
    width: 142px;
    height: 480px;
    border: 1px solid #ddd;
}
.thumbs-item{
    box-sizing: content-box;
    margin: 1px;
    height: 79px;
    opacity: .5;
}
.thumbs-item.cur{
    opacity: 1;
}

 

var sliderItem=document.getElementsByClassName("slider-item");
var thumbsItem=document.getElementsByClassName("thumbs-item");
for(var i=0;i<thumbsItem.length;i++){
    (function(k){
        thumbsItem[i].onclick=function(){
            for(j=0;j<thumbsItem.length;j++){
                thumbsItem[j].className="thumbs-item";
                sliderItem[j].className="slider-item";
            }
            this.className+=" cur";
            sliderItem[k].className+=" active";//用到i会出现闭包,用立即执行函数解决。因为外面的i不会被保存,i永远都是循环执行后的值
        }
    })(i)//通过立即执行函数把循环到的i保存起来
  
}

案例中闭包小问题:

function test(){
    var arr=[];
    for(var i=0;i<10;i++){
        arr[i]=function(){//funcition并没有执行,只是i++
            console.log(i);
        }
    }
    return arr;

var myArr=test();
console.log(myArr);//形成闭包,把里面的arr传到了外面 [ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ]
for(var j=0;j<myArr.length;j++){
   myArr[j]();//循环执行,打印10个10
}


---------------------------------------------------------------------------
/*    解决在for循环中, 改用立即执行函数,保存i
     for(var i=0;i<10;i++){
        (function(j){
           arr[j]=function(){//funcition并没有执行,只是i++
                   console.log(j);//0 1 2 3....9
             }
        })(i)
    }
   return arr;
} */
---------------------------------------------------------------------------

看了上面例子我们就能理解幻灯片例子中的立即函数写法了

var sliderItem=document.getElementsByClassName("slider-item");
var thumbsItem=document.getElementsByClassName("thumbs-item");
for(var i=0;i<thumbsItem.length;i++){
    (function(k){
        thumbsItem[i].onclick=function(){
            for(j=0;j<thumbsItem.length;j++){
                thumbsItem[j].className="thumbs-item";
                sliderItem[j].className="slider-item";
            }
            this.className+=" cur";
            sliderItem[k].className+=" active";//用到i会出现闭包,用立即执行函数解决。因为外面的i不会被保存,i永远都是循环执行后的值
        }
    })(i)//通过立即执行函数把循环到的i保存起来,k是形参
  
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值