资讯专栏INFORMATION COLUMN

无缝轮播

xiaochao / 1256人阅读

摘要:无缝轮播工作中遇到轮播怎么办千万不要自己写轮播我们学这么多基础是为了能够看懂大神的代码然后用大神的代码因为如果自己写一个轮播就可能出现各种各样的如果是在工作中这样做无异于浪费自己的时间降低工作效率最好的方法是直接用大神写好的源码然后看使用文

无缝轮播

工作中遇到轮播怎么办?千万不要自己写轮播
我们学这么多基础是为了能够看懂大神的代码,然后用大神的代码
因为如果自己写,一个轮播,就可能出现各种各样的bug,如果是在工作中,这样做无异于浪费自己的时间,降低工作效率.最好的方法是直接用大神写好的源码,然后看使用文档.
可能是最厉害的轮播组件(预览与使用)
可能是最厉害的轮播组件(github)
当自己进行学习的时候,可以花时间去探索,造轮子,自己撸一遍.但是要分清工作和学习的不同状态

1无缝轮播
let $btns = $("#btns>button");
let $slides = $("#slides");
let current = 0;//当前图片元素的index值
let $imgs = $slides.children("img");

makeFakeImg();//克隆假的图片,并放到应有的位置上
$slides.css({transform:"translateX(-400px)",})//初始化第一张图片的位置
binEvent();//绑定按钮的监听事件

function binEvent() {//绑定按钮的监听事件
    $btns.eq(0).on("click",function () {
        if(current === 2){//如果我是从第三张图到第一张图的
            console.log("说明我是从下标为2的图(第三张)过来的")
            //那么我就先转移到假图,然后再瞬间转移到真图
            $slides.css({//先轮播到最后一张假图
                transform:"translateX(-1600px)",
            }).one("transitionend",function(){//必须在这个transitionend过渡执行结束在执行下面的代码,不然就一步就到-400px了,也没有过渡
                console.log("我变回了第一张真实的图")
                //套路:如果想让元素不执行过渡动画,那么就把他先hide了,在offset,在这中间写代码,最后再show出来,
                $slides.hide().offset();
                $slides.css({
                    transform:"translateX(-400px)",
                }).show();
            })
        }else {
            $slides.css({
                transform:"translateX(-400px)",
            })
        }
        current = 0;
    })
    $btns.eq(1).on("click",function () {
        $slides.css({
            transform:"translateX(-800px)",
        })
        current = 1;
    })
    $btns.eq(2).on("click",function () {
        if (current === 0){
            console.log("说明我是从下标为0的图(第一张)过来的")
            //赋值上面的代码
            $slides.css({
                transform:"translateX(0px)",
            }).one("transitionend",function(){
                console.log("我变回第3张真实的图")
                $slides.hide().offset();
                $slides.css({
                    transform:"translateX(-1200px)",
                }).show();
            })
        }else{
            $slides.css({
                transform:"translateX(-1200px)",
            })
        }
        current = 2;
    })
}
function makeFakeImg(){//克隆假的图片,并放到应有的位置上
    // 闭包:函数和这个函数用到的作用于之外的变量.js函数不用传参进来,可以直接对作用域外的变量进行作用
    let $firstImg = $imgs.eq(0).clone(true);
    let $lastImg = $imgs.eq($imgs.length-1).clone(true);
    /*
    * console.log($firstImg[0].outerHTML);
    console.log($lastImg[0].outerHTML);//在jquery中如果对jquery元素写$lastImg[0]这样就是原来的元素,可以用原来的方法
    * */
//添加克隆的图片
    $slides.append($firstImg);
    $slides.prepend($lastImg);
}
2无缝轮播优化

无缝轮播优化,可随意图片不用修改js代码

let $btns = $("#btns>button");
let $slides = $("#slides");
let current = 0;//当前图片元素的index值
let $imgs = $slides.children("img");

makeFakeImg();//克隆假的图片,并放到应有的位置上
$slides.css({transform:"translateX(-400px)",})//初始化第一张图片的位置
binEvent();//绑定按钮的监听事件

function binEvent() {//绑定按钮的监听事件
    $btns.on("click",function (e) {
        let index = $(this).index();
        if (current ===($btns.length-1) && index===0){//如果他是从最后一张图来到第一张图
            $slides.css({
                transform:`translateX(-${($btns.length+1)*400}px)`,
            }).one("transitionend",function () {//待过渡结束后,再转到真正的位置
                $slides.hide().offset();
                $slides.css({
                    transform:`translateX(-400px)`,
                }).show()
            })
        }else if (current ===0 && index===($btns.length-1)) {//如果他是从第一张图来到最后一张图
            $slides.css({
                transform:`translateX(0px)`,
            }).one("transitionend",function () {
                $slides.hide().offset();
                $slides.css({
                    transform:`translateX(-${($btns.length)*400}px)`,
                }).show()
            })
        }else {//其余的直接转变
            $slides.css({
                transform:`translateX(-${(index+1)*400}px)`,
            });
        }
        current=index;
    })
}
function makeFakeImg(){//克隆假的图片,并放到应有的位置上
    let $firstImg = $imgs.eq(0).clone(true);
    let $lastImg = $imgs.eq($imgs.length-1).clone(true);

//添加克隆的图片
    $slides.append($firstImg);
    $slides.prepend($lastImg);
}
3优化,添加左右按钮,点按钮,自动轮播

代码
演示

let $pointBtns = $("#pointBtns>div");
let $slides = $("#slides");
let current = 0;//当前图片元素的index值
let $imgs = $slides.children("img");

makeFakeImg();//克隆假的图片,并放到应有的位置上
$slides.css({transform:"translateX(-400px)",})//初始化第一张图片的位置
binEvent();//绑定按钮的监听事件

//绑定上一张下一张按钮监听事件
$("#prevBtn").on("click",function () {
    goToslides(current-1);
})
$("#nextBtn").on("click",function () {
    goToslides(current+1);
})

//定时轮播
let timer = setInterval(function () {
    goToslides(current+1);
},1000)
$(".container").on("mouseenter",function () {
    window.clearInterval(timer);
})
$(".container").on("mouseleave",function () {
    timer = setInterval(function () {
        goToslides(current+1);
    },1000)
})

//barBtn的显示与消失
$(".window").on("mouseenter",function () {
    $(".barBtn").addClass("active");
})
$(".window").on("mouseleave",function () {
    $(".barBtn").removeClass("active");
})



function binEvent() {//绑定按钮的监听事件
    $pointBtns.on("click",function (e) {
        let index = $(this).index();
        goToslides(index);//传入要进入的下一个图片的index,然后执行图片转换工作
    })
}
function makeFakeImg(){//克隆假的图片,并放到应有的位置上
    // 闭包:函数和这个函数用到的作用于之外的变量.js函数不用传参进来,可以直接对作用域外的变量进行作用
    let $firstImg = $imgs.eq(0).clone(true);
    let $lastImg = $imgs.eq($imgs.length-1).clone(true);
    /*
    * console.log($firstImg[0].outerHTML);
    console.log($lastImg[0].outerHTML);//在jquery中如果对jquery元素写$lastImg[0]这样就是原来的元素,可以用原来的方法
    * */
//添加克隆的图片
    $slides.append($firstImg);
    $slides.prepend($lastImg);
}

function goToslides(index) {//传入要进入的下一个图片的index,然后执行图片转换工作

    //在这里判断上一张下一张传进来的index越界问题
    if (index > $imgs.length-1){
        index = 0;
    } else if (index < 0){
        index = $imgs.length - 1;
    }

    //给下标为index的圆点按钮添加变成orange的代码
    $pointBtns.eq(index).addClass("active").siblings().removeClass("active");

    if (current ===($imgs.length-1) && index===0){//如果他是从最后一张图来到第一张图
        $slides.css({
            transform:`translateX(-${($imgs.length+1)*400}px)`,
        }).one("transitionend",function () {//待过渡结束后,再转到真正的位置
            $slides.hide().offset();
            $slides.css({
                transform:`translateX(-400px)`,
            }).show()
        })
    }else if (current ===0 && index===($imgs.length-1)) {//如果他是从第一张图来到最后一张图
        $slides.css({
            transform:`translateX(0px)`,
        }).one("transitionend",function () {
            $slides.hide().offset();
            $slides.css({
                transform:`translateX(-${($imgs.length)*400}px)`,
            }).show()
        })
    }else {//其余的直接转变
        $slides.css({
            transform:`translateX(-${(index+1)*400}px)`,
        });
    }
    current=index;
}

代码
演示

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96311.html

相关文章

  • 最简单的无缝轮播

    摘要:昨天学习了轮播的原理,今天再来看看无缝轮播的技术。无缝轮播无缝轮播的原来大致类似小时候跳大绳,小朋友一个个进入,一个个出来,出来后排到队伍末尾,等在着进入,无缝轮播也类似这种机制。 昨天学习了轮播的原理,今天再来看看无缝轮播的技术。 昨天学习的轮播机制类似于走马灯,所有图片排成一排,轮流在你眼前走过,你就会感觉他们动起来了,今天学的无缝轮播就不能用昨天的思路了,它和昨天最大的区别是,从...

    Kyxy 评论0 收藏0
  • js、jQuery实现文字上下无缝轮播、滚动效果

    摘要:因项目需要实现消息通知上下无缝轮播的效果,所以写了一下,在这个分享出来,希望再次遇到此需求的道友,可以直接拷贝来用,节约一点不必要的时间。 因项目需要实现消息通知上下无缝轮播的效果,所以写了一下,在这个分享出来,希望再次遇到此需求的道友,可以直接拷贝来用,节约一点不必要的时间。 原生JS版本 文字上下无缝轮播 * { margin: ...

    zhangwang 评论0 收藏0
  • js、jQuery实现文字上下无缝轮播、滚动效果

    摘要:因项目需要实现消息通知上下无缝轮播的效果,所以写了一下,在这个分享出来,希望再次遇到此需求的道友,可以直接拷贝来用,节约一点不必要的时间。 因项目需要实现消息通知上下无缝轮播的效果,所以写了一下,在这个分享出来,希望再次遇到此需求的道友,可以直接拷贝来用,节约一点不必要的时间。 原生JS版本 文字上下无缝轮播 * { margin: ...

    PAMPANG 评论0 收藏0
  • js、jQuery实现文字上下无缝轮播、滚动效果

    摘要:因项目需要实现消息通知上下无缝轮播的效果,所以写了一下,在这个分享出来,希望再次遇到此需求的道友,可以直接拷贝来用,节约一点不必要的时间。 因项目需要实现消息通知上下无缝轮播的效果,所以写了一下,在这个分享出来,希望再次遇到此需求的道友,可以直接拷贝来用,节约一点不必要的时间。 原生JS版本 文字上下无缝轮播 * { margin: ...

    focusj 评论0 收藏0
  • 原生js写一个无缝轮播图插件(支持vue)

    摘要:轮播图插件前言写这个插件的原因前段时间准备用加上网易云的接口,模拟网易云音乐移动端。目前主要实现了无缝轮播,自动播放,端左右按钮点击切换,移动端手势滑动切换。 轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端。因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使用UI组件。在轮播图部分,...

    MSchumi 评论0 收藏0

发表评论

0条评论

xiaochao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<