Home  >  Article  >  Web Front-end  >  JavaScript enables continuous and seamless scrolling of single or multiple pictures

JavaScript enables continuous and seamless scrolling of single or multiple pictures

藏色散人
藏色散人forward
2020-05-10 14:18:502594browse

JavaScript enables continuous and seamless scrolling of single or multiple pictures

Background:

If you want to achieve continuous scrolling of images, since you use js, you must not add css animation. , transition and other related styles. If you want to smooth the scrolling, you can move it pixel by pixel, which will be very smooth. If you add a transition animation, when the picture is reset to 0, there will be a backward animation effect, and Expectations were not met.

Recommended: "javascript Advanced Tutorial"

Principle:

The picture scrolling principle is the same as the picture The carousel principle also applies to a series of scrolls such as text scrolling. Seamless splicing can be achieved by copying the last picture or the last bunch of text and inserting it into the first line, or copying the first picture or a bunch of text and inserting it at the end. , Prerequisites: 1. There must be no transition animation set, 2. When it is reset to 0, the position of the picture that has been scrolled to currently does not appear to have changed to the naked eye.

Implementation:

html mainly contains three parts:

1. The outermost box is used to display the area of ​​the scroll chart, overflow:hidden ;

2. The scrolling box mainly changes the positioning value of the box to achieve scrolling. It contains all the pictures or text to be scrolled.

3. The box containing pictures or text.

Code:

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.innerHTML;
        this.elem.innerHTML = this.elem.innerHTML + 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)
    }
}

The above is the detailed content of JavaScript enables continuous and seamless scrolling of single or multiple pictures. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete