最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實(shí)現(xiàn)單張或多張圖片持續(xù)無(wú)縫滾動(dòng)的示例代碼

 更新時(shí)間:2020年05月10日 09:24:26   作者:蓓蕾心晴  
這篇文章主要介紹了JS實(shí)現(xiàn)單張或多張圖片持續(xù)無(wú)縫滾動(dòng)效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

背景:

想要實(shí)現(xiàn)圖片持續(xù)滾動(dòng),既然使用js,就千萬(wàn)不要加css動(dòng)畫(huà)、過(guò)渡等相關(guān)樣式,如果想要滾動(dòng)的平滑一下,可以一像素一像素的感動(dòng),則很平滑,如果加了過(guò)渡動(dòng)畫(huà),當(dāng)圖片重置為0時(shí),會(huì)有往回倒的動(dòng)畫(huà)效果,跟預(yù)期不符。

原理:

圖片滾動(dòng)原理同圖片輪播原理,同樣也適用于文字滾動(dòng)等一系列滾動(dòng),通過(guò)復(fù)制最后一張圖片或最后一堆文字插入第一行,或復(fù)制第一張圖片或一堆文字插入在結(jié)尾,來(lái)實(shí)現(xiàn)無(wú)縫拼接,前提:1、必須是沒(méi)有設(shè)置過(guò)渡動(dòng)畫(huà)的,2、重置為0的時(shí)候與當(dāng)前已經(jīng)滾動(dòng)到的高度對(duì)于圖片的位置而言肉眼看上去沒(méi)變化。

實(shí)現(xiàn):

html主要包含三塊:

1、最外層盒子,用來(lái)展示滾動(dòng)圖的區(qū)域,overflow:hidden;

2、滾動(dòng)的盒子,主要改變?cè)摵凶拥亩ㄎ恢?,?lái)實(shí)現(xiàn)滾動(dòng),里面包含所有要滾動(dòng)的圖片或文字

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

代碼:

class Roll {
  constructor(opts) {
    this.elem = opts.elem; // 圖片包含滾動(dòng)長(zhǎng)度的元素的
    this.elemBox = opts.elemBox; //圖片展示區(qū)域元素,為了獲取展示區(qū)域的高度
    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;
    // 如果向上滾或者向左滾動(dòng)每次減1,向下滾或者向右滾動(dòng)每次加1
    if(this.direction === 'top' || this.direction === 'left'){
      this.speed = -1;
    }else{
      this.speed = 1;
    }
  }
  roll(){
    switch (this.direction) {
      case "top":
        // 如果滾動(dòng)的盒子的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":
        // 如果滾動(dòng)的盒子的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":
        // 如果滾動(dòng)的盒子的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":
        // 如果滾動(dòng)的盒子的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:
        // 默認(rèn)向上滾動(dòng),如果滾動(dòng)的盒子的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)
  }
}

參考鏈接:

https://www.teakki.com/p/590beb7be8136dfc5f21770d

總結(jié)

到此這篇關(guān)于JS實(shí)現(xiàn)單張或多張圖片持續(xù)無(wú)縫滾動(dòng)的文章就介紹到這了,更多相關(guān)js 圖片 無(wú)縫滾動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

江门市| 永福县| 双鸭山市| 宁波市| 都兰县| 温州市| 河源市| 定兴县| 万全县| 乌审旗| 怀宁县| 麻江县| 永春县| 定边县| 杭州市| 商水县| 惠州市| 准格尔旗| 德州市| 屯留县| 若尔盖县| 平乡县| 资溪县| 屯门区| 北京市| 沙坪坝区| 墨玉县| 长阳| 玉树县| 宝应县| 长岭县| 和林格尔县| 肇东市| 合山市| 仪征市| 芦山县| 分宜县| 柏乡县| 阿克陶县| 沂南县| 荔波县|