js轮播图

近日,想写一些页面练习前面所学的东西,因为经常在极客学院看视频教程,所以一时兴起就仿照极客学院官网,制作了一个简单的页面,实现了基本的前端页面,及动画效果。其中一个轮播图算是有点难度的,故而总结下,加深记忆。

/*
interval:对应的是自动切换的延时
imgwidth:对应轮播图,每个图片的大小
container:顶层容器
banner_list:包含轮播图的父级容器
buttons:可选参数,设置下方的切换小按钮,如没有可设为null
prev,next:可选参数,设置左右两个切换按钮
*/
function slider_banner(interval, img_width, container, banner_list, buttons, prev, next) {
    var container = document.getElementById(container);
    var list = document.getElementById(banner_list);
    var showButton = function(){};//showButton由buttons控制
    //判断是否有prev和next,如果有,添加相应的函数,没有直接跳过
    if(prev && next) {
        var prev = document.getElementById(prev);
        var next = document.getElementById(next);
        next.onclick = next_click;

        prev.onclick = function() {
            if(animated) {
                return;
            }
            if(index == 1) {
                index = len;
            } else {
                index -= 1;
            }
            animate(img_width);
            showButton();
        }
    }
    //原理同上
    if(buttons) {
        var buttons = document.getElementById(buttons).getElementsByTagName("a");

        function isshowButton() {
            for(var i = 0; i < buttons.length; i++) {
                if(buttons[i].className == "active") {
                    buttons[i].className = "";
                    break;
                }
            }
            buttons[index - 1].className = "active";
        }
        for(var i = 0; i < buttons.length; i++) {
            buttons[i].onclick = function() {
                if(animated) {
                    return;
                }
                if(this.className == "active") {
                    return;
                }
                var myIndex = parseInt(this.getAttribute("data-index"));
                console.log(myIndex);
                var offset = parseInt("-" + img_width) * (myIndex - index);
                animate(offset);
                index = myIndex;

                showButton();
            }
        }
        showButton = isshowButton;
    }
    //这个参数为用来匹配底部小按钮的
    var index = 1;
    //获取轮播图个数,因为我们要进行无缝轮播,所以多加两个图片,所以个数必须减去2
    var len = list.children.length - 2;
    //判断是否在执行动画
    var animated = false;
    var timer;//定时器

    function next_click() {
        if(animated) {
            return;
        }
        if(index == len) {
            index = 1;
        } else {
            index += 1;
        }
        animate(parseInt("-" + img_width));
        showButton();
    }

    function animate(offset) {
        if(offset == 0) {
            return;
        }
        animated = true;
        var time = 600;
        var inteval = 30;
        var speed = offset / (time / inteval);//设置速度

        var left = parseInt(list.style.left) + offset;

        var go = function() {
            if((speed > 0 && parseInt(list.style.left) < left) || (speed < 0 && parseInt(list.style.left) > left)) {//判断是否需要滚动
                list.style.left = parseInt(list.style.left) + speed + "px";
                setTimeout(go, inteval);
            } else {
                list.style.left = left + "px";
                if(left > 0) {
                    list.style.left = parseInt("-" + img_width) * len + "px";
                }
                if(left < (parseInt("-" + img_width) * len)) {
                    list.style.left = parseInt("-" + img_width) + "px";
                }
                animated = false;
            }
        }
        go();
    }
    //自动轮播
    function play() {
        timer = setTimeout(function() {
            next_click();
            play();
        }, interval);
    }
    //停止轮播
    function stop() {
        clearTimeout(timer);
    }
    //鼠标移入顶层容器,停止,移出自动轮播
    container.onmouseover = stop;
    container.onmouseout = play;
    play();
}

最后附上我做的仿极客学院网站github地址:https://github.com/wd4219/jike.git
极客学院网址:http://www.jikexueyuan.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值