js第一次轮播图

轮播图功能描述:
上一张图片按钮、下一张图片按钮、角标选择图片按钮、图片切换后标题切换。

遇到的问题:
curIndex全局变量想了很长时间如何使用。

解决:
在角标中,将每个角标的下标存放到curIndex,可以直接使用计算marginLeft。

在上一张和下一张中,都只是一个div标签,所以不能利用下标存放curIndex。

点击上一张:每次点击用if判断curIndex的值,如果大于0,减减,切换到上一张。
如果等于0了,说明回到了第一张图片,将curIndex重新赋值为imgs.children.length-1。(图片的个数-1,就是最后一张图片的下标)

点击下一张:每次点击用if判断curIndex的值,如果小于imgs.children.length-1,最后一张图片的下标,加加,切换到下一张图片。
如果等于imgs.children.length-11,最后一张图片的下标,说明到了最后一张图片,将curIndex重新赋值为0回到第一张图片。

var left  = document.getElementsByClassName('left')[0];     //上一张按钮div
var imgs = document.getElementsByClassName('imgs')[0];      //存放图片的div
var title = document.getElementsByClassName('title')[0];    //标题div
var timer = null;   //动画切换计时器
var curIndex = 0;   //当前显示第几张轮播图
/**
 * 上一张按钮
 */

left.addEventListener('click',last); 
function last(){
    //利用cuIndex记录,点击一次cuIndex减一,当cuIndex为0时说明到了最后一张,再重新赋值。
    if(curIndex > 0){
        curIndex--;
    }else{
        curIndex = imgs.children.length-1;  
    }
    setStatus();
        
} 

/**
 * 下一张按钮
 */
var right  = document.getElementsByClassName('right')[0];
right.addEventListener('click',next); 
function next(){
    //利用cuIndex记录,点击一次cuIndex加一,当cuIndex大于img.length -1时,说明到了最后一张,再重新赋值
    if(curIndex < imgs.children.length-1){
        curIndex ++;
    }else{
        curIndex = 0;
    }
    setStatus();
} 

/**
 * 角标设置
 */

var a_jiaobiao = document.getElementsByClassName('jiaobiao')[0];
for(let i = 0;i<a_jiaobiao.children.length;i++){
    a_jiaobiao.children[i].addEventListener('mouseenter',function(){
        curIndex= i;
        setStatus();
    })
}

/**
 * 动画效果
 */
function setStatus(){
    for (var i = 0; i < a_jiaobiao.children.length; i++) {
        if(i == curIndex){
            a_jiaobiao.children[i].style.backgroundColor = "#369";
        }else{
            a_jiaobiao.children[i].style.backgroundColor = "#61687c";
        }
        
    }

    //开始值
    var start = parseInt(imgs.style.marginLeft);  
    var start2 = parseInt(title.style.marginTop); 
    //  目标值   图片向左移动       下标 * -100                     
    var end = curIndex * -100;
    var end2 = curIndex * -30;
    //距离
    var dis = end - start;
    var dis2 = end2 - start2;
    //完成变化的时间
    var duration = 500;
    //速度
    var speed = dis / duration;
    var speed2 = dis2/duration;
    //如果动画重复,先清除动画
    if(timer){
        clearInterval(timer);
    }
    timer = setInterval(function(){
        start += speed * 20;
        start2 += speed2 * 20;
        imgs.style.marginLeft = start + "%"; 
        title.style.marginTop = start2 + "px"; 
        if(Math.abs(end-start) < 1){
            imgs.style.marginLeft = end + "%"; 
            title.style.marginTop = end2 + "px";
            clearInterval(timer); 
        }
        
    },20);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值