热门IT资讯网

Javascript实现图片无缝滚动效果

发表于:2024-11-29 作者:热门IT资讯网编辑
编辑最后更新 2024年11月29日,今天小编就为大家带来一篇有关Javascript实现图片无缝滚动效果的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。实现原理:图片滚动原理同图片轮播原理,同样也适用于文字滚动

今天小编就为大家带来一篇有关Javascript实现图片无缝滚动效果的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。

实现原理:

图片滚动原理同图片轮播原理,同样也适用于文字滚动等一系列滚动,通过复制最后一张图片或最后一堆文字插入第一行,或复制第一张图片或一堆文字插入在结尾,来实现无缝拼接。

前提:1、必须是没有设置过渡动画的,2、重置为0的时候与当前已经滚动到的高度对于图片的位置而言肉眼看上去没变化。

实现:

html主要包含三块:

1、最外层盒子,用来展示滚动图的区域,overflow:hidden;

2、滚动的盒子,主要改变该盒子的定位值,来实现滚动,里面包含所有要滚动的图片或文字

3、包含图片或文字的盒子。

具体代码:

class Roll {    constructor(opts) {        this.elem = opts.elem; // 图片包含滚动长度的元素的        this.elemBox = opts.elemBox; //图片展示区域元素,为了获取展示区域的高度        this.direction = opts.direction;        this.time = opts.time;        this.init();        this.roll = this.roll.bind(this)        this.startRoll = this.startRoll.bind(this)        this.stopRoll = this.stopRoll.bind(this)    }    init(){        this.elemHeight = this.elem.offsetHeight;        this.elemHtml = this.elem[xss_clean];        this.elem[xss_clean] = this.elem[xss_clean] + this.elemHtml+ this.elemHtml;        this.speed;        // 如果向上滚或者向左滚动每次减1,向下滚或者向右滚动每次加1        if(this.direction === 'top' || this.direction === 'left'){            this.speed = -1;        }else{            this.speed = 1;        }    }    roll(){        switch (this.direction) {            case "top":                // 如果滚动的盒子的top值超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetTop) >= this.elemHeight){                    this.elemBox.style.top = 0;                }else{                    this.elemBox.style.top = this.elemBox.offsetTop + this.speed + 'px';                }                break;            case "bottom":                // 如果滚动的盒子的bottom值超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetBottom) >= this.elemHeight){                    this.elemBox.style.bottom = 0;                }else{                    this.elemBox.style.bottom = this.elemBox.offsetBottom + this.speed + 'px';                }                break;            case "left":                // 如果滚动的盒子的left超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetLeft) >= this.elemHeight){                    this.elemBox.style.left = 0;                }else{                    this.elemBox.style.left = this.elemBox.offsetLeft + this.speed + 'px';                }                break;            case "right":                // 如果滚动的盒子的right超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetRight) >= this.elemHeight){                    this.elemBox.style.right = 0;                }else{                    this.elemBox.style.right = this.elemBox.offsetRight + this.speed + 'px';                }                break;            default:                // 默认向上滚动,如果滚动的盒子的top超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetTop) >= this.elemHeight){                    this.elemBox.style.top = 0;                }else{                    this.elemBox.style.top = this.elemBox.offsetTop + speed + 'px';                }        }    }    stopRoll(){        clearInterval(this.scrollTimer)    }    startRoll(){        this.scrollTimer = setInterval(this.roll,this.time)    }}

看完上述内容,你们掌握Javascript实现图片无缝滚动效果的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0