>웹 프론트엔드 >JS 튜토리얼 >js는 그림의 원활한 스크롤을 실현합니다.

js는 그림의 원활한 스크롤을 실현합니다.

王林
王林앞으로
2020-05-11 09:15:502254검색

js는 그림의 원활한 스크롤을 실현합니다.

구현 원리:

그림 스크롤 원리는 그림 회전식 원리와 동일합니다. 텍스트 스크롤과 같은 일련의 스크롤에도 적용할 수 있습니다. 텍스트를 입력하거나 첫 번째 그림을 복사합니다. 끝 부분에 그림이나 텍스트 묶음을 삽입하면 원활한 연결이 가능합니다.

전제: 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.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)
    }
}

추천 튜토리얼: js 입문 튜토리얼

위 내용은 js는 그림의 원활한 스크롤을 실현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제