国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - JS原生實現輪播圖的幾種方法

JS原生實現輪播圖的幾種方法

2022-02-20 17:35IsPinocchio js教程

這篇文章主要介紹了JS原生實現輪播圖的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

輪播圖

主要思想就是:

在大的容器里,裝著一個很長的表,表是容器寬度的整數倍。

然后通過更改列表樣式里的left屬性來實現左右滑動。

本文旨在控制滑動五張圖片,但在html中使用了七張圖片,第一張和最后一張是有重復的,至于原因會在下面解釋。

JS原生實現輪播圖的幾種方法

通過給容器設定overflow:hidden屬性來保證只顯示容器視口大小的一張圖片。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<body>
 <div id="container">  /*容器*/
  <div id="wrap" style="left: -400px;">  /*存放圖片的列表*/
   <div class="item item5">l5</div>
   <div class="item item1">1</div>
   <div class="item item2">2</div>
   <div class="item item3">3</div>
   <div class="item item4">4</div>
   <div class="item item5">5</div>
   <div class="item item1">r1</div>
  </div>
 </div>
 <div id="key">   /*設置按鈕*/  
  <div id="list">         /*點擊小圓圈切換到固定圖片*/
   <div class="btn1 btnNum">1</div>
   <div class="btn2 btnNum">2</div>
   <div class="btn3 btnNum">3</div>
   <div class="btn4 btnNum">4</div>
   <div class="btn5 btnNum">5</div>
  </div>
  <div id="btn">     /*向左切換和向右切換的按鈕*/
   <button class="left">←</button>
   <button class="right">→</button>
  </div>
 </div>
</body>

CSS:

可以給wrap列表設置flex屬性,讓圖片在一行顯示。其他布局可以按自己需求來做。

注意在定義id="wrap"d的節點中設置了內聯樣式left。因為在切換圖片的時候我用到的是left屬性,而如果不設置left的話,在DOM設置style時是找不到left屬性的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<style>
  #container {
   width: 400px;
   height: 300px;
   border: 8px rgb(8, 8, 8) solid;
   margin: 0 auto;
   margin-top: 150px;
   overflow: hidden;
   position: relative;
  }
  #wrap {
   width: 2800px;
   height: 300px;
   display: flex;
   position: relative;
  }
  .item {
   flex: 1;
   width: 400px;
   height: 300px;
  }
  .item1 {
   background-color: rosybrown;
  }
  .item2 {
   background-color: rgb(12, 226, 37);
  }
  .item3 {
   background-color: rgb(212, 221, 29);
  }
  .item4 {
   background-color: rgb(61, 27, 182);
  }
  .item5 {
   background-color: rgb(221, 23, 145);
  }
  #key {
   width: 400px;
   height: 300px;
   margin: 0 auto;
  }
  #list {
   width: 400px;
   height: 40px;
   display: flex;
   justify-content: center;
  }
  #list div {
   margin-top: 10px;
   margin-left: 10px;
   width: 20px;
   height: 20px;
   background-color: rgb(13, 162, 221);
   text-align: center;
   border-radius: 45%;
   opacity: 0.6;
  }
  #list div:hover {
   cursor: pointer;
   opacity: 1;
  }
  #btn {
   width: 400px;
   text-align: center;
  }
 </style>

這是完整的樣式

JS原生實現輪播圖的幾種方法

每種顏色代表一張圖片,且按序標了序號。起始位置是第二張圖片。

至于為什么第一張和最后一張有額外重復的一張放在兩端,是為了在做滑動效果的時候,最后一張(倒數第二張,粉紫色)可以繼續向右順滑的滑到第一張(其實是本圖的第二張,淺棕色的)。第一張(本圖第二張,淺棕色)向左滑動時可以順滑的滑到最后一張(實則倒數第二張)。繼續往下看。

1. 多種輪播方式

輪播必然離開不了定位,以及修改wrap列表的left屬性,使其移動。

先初始化幾個數據

?
1
2
3
4
5
6
7
8
var wrap = document.getElementById('wrap');
var nowleft = -400;     //用于存放當前列表的left的值
var currIndex = 1;          //用于存放當前是第幾個圖片
//定位到幾個按鈕
var btnNum = document.getElementsByClassName('btnNum'); //小圓圈
 
var right = document.getElementsByClassName('right')[0]; //向右滑的按鈕
var left = document.getElementsByClassName('left')[0];      //向左滑的按鈕

1.1 定時自動輪播效果

只講向左自動滑動的效果

既然是自動輪播的,那必然少不了setInterval()定時器讓其持續輪播。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function next() {
  setInterval(function() {      //設置每兩秒切換一次圖片
    wrap.style.transition = 'left 1s' //設定有過渡滑動的效果
        nowleft = parseInt(wrap.style.left) - 400;  //切換一次后nowleft應該減少(即向左滑)一個圖片的寬度
    wrap.style.left = nowleft + 'px';   //然后將nowleft賦值給wrap的left屬性
    if(parseInt(wrap.style.left) == -2400) { //判斷到最后一個后,偷偷變回到最開頭的位置
      setTimeout(() => {
       wrap.style.transition = 'none'  //因為是偷偷變回去,所以要取消過渡效果
       nowleft = -400;
       wrap.style.left = nowleft + 'px'
      },1200) //保證定時器的時間大于過度的時間且小于每次輪換的時間
     }
  },2000)
}

/由于wrap.style.left 返回的是帶px的字符串,所以用parseInt可以取得前面的數值/

1.2 按向右滑動按鈕

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
right.addEventListener('click',function() {
  if(nowleft >= -2000){   //判斷是否到最后一個圖了,沒有的話就開始滑動
   nowleft -= 400;
   wrap.style.transition = 'left 1s';
   wrap.style.left = nowleft + 'px';
  }
  if(nowleft == -2400) {   //如果到最后一個圖了,就偷偷換回第一張圖
   setTimeout(() => {
    wrap.style.transition = 'none';
    nowleft = -400;
    wrap.style.left = nowleft + 'px';
   },1020)
  }
})

1.3 小圓圈切換圖片

?
1
2
3
4
5
6
7
8
9
10
11
12
for(let i = 0; i < btnNum.length; i++) {
  btnNum[0].style.opacity = 1;
  btnNum[i].addEventListener('click',function() {
   wrap.style.transition = 'left 1s';
   for(let j = 0; j < btnNum.length; j++) {
    btnNum[j].style.opacity = '0.6';
   }
   btnNum[i].style.opacity = 1;
   nowleft = nowleft - (i+1 - currIndex)*400;
   currIndex = i + 1;
   wrap.style.left = nowleft + 'px';
})

其實本文在控制從最后一個圖偷偷換回第一張圖的操作是有缺陷的,因為要把控序號5的圖滑動到序號為r1的圖是需要1s的,然而wrap.style.left是直接發生變化的,不會隨著過渡期間發生位移而left一直變化。所以把控序號5完整滑動到r1后再偷偷切換到序號1的時間是有些難控制的。

而且比如從序號1連續點擊3下是可以切換到序號4的。然是從序號5連續點擊3下是不可以的,在r1切換到序號1的時候是無法響應點擊效果的,因此此處交互差異會容易感到別扭。

如果想改善這個別扭的bug,可以用下防抖來改善。

到此這篇關于JS原生實現輪播圖的幾種方法的文章就介紹到這了,更多相關JS原生輪播圖內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Pinoochio/article/details/115035379

延伸 · 閱讀

精彩推薦
  • js教程JavaScript 繪制餅圖的示例

    JavaScript 繪制餅圖的示例

    這篇文章主要介紹了JavaScript 繪制餅圖的示例,幫助大家更好的利用JavaScript繪制圖表,感興趣的朋友可以了解下...

    MwqgKG11422022-01-21
  • js教程JavaScript中layim之整合右鍵菜單的示例代碼

    JavaScript中layim之整合右鍵菜單的示例代碼

    這篇文章主要介紹了JavaScript中layim之整合右鍵菜單的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以...

    踮腳敲代碼11532022-01-19
  • js教程js加減乘除精確運算方法實例代碼

    js加減乘除精確運算方法實例代碼

    這篇文章主要給大家介紹了關于js加減乘除精確運算方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值...

    ``木頭人```8582022-01-04
  • js教程js屬性對象的hasOwnProperty方法的使用

    js屬性對象的hasOwnProperty方法的使用

    這篇文章主要介紹了js屬性對象的hasOwnProperty方法的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    weiqinl11042022-01-17
  • js教程微信小程序tab切換可滑動切換導航欄跟隨滾動實現代碼

    微信小程序tab切換可滑動切換導航欄跟隨滾動實現代碼

    這篇文章主要介紹了微信小程序tab切換可滑動切換導航欄跟隨滾動實現代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下...

    竹林中9272022-01-19
  • js教程JavaScript中arguments的使用方法詳解

    JavaScript中arguments的使用方法詳解

    這篇文章主要給大家介紹了關于JavaScript中arguments的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    等待的L先生3732021-12-15
  • js教程了不起的11個JavaScript代碼重構最佳實踐小結

    了不起的11個JavaScript代碼重構最佳實踐小結

    這篇文章主要介紹了了不起的11個JavaScript代碼重構最佳實踐小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    pikapi3862021-12-29
  • js教程用javascript實現倒計時效果

    用javascript實現倒計時效果

    這篇文章主要為大家詳細介紹了用javascript實現倒計時效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    愛前端的茂茂7962022-01-20
主站蜘蛛池模板: 中文字幕日韩欧美一区二区三区 | 国产毛片在线 | 亚洲成a人 | 96成人爽a毛片一区二区 | 亚洲三级网站 | 国产日韩精品一区二区 | 欧美午夜一区二区三区 | 亚洲三区在线观看 | 中文字幕在线观看一区 | 亚洲午夜视频 | 黄色动漫在线观看 | 午夜在线 | 韩日精品视频 | 综合久久99 | 国产中文字幕一区 | 91精品国产一区二区 | 精品一区二区精品 | 国产黄色av| 2级毛片| 欧美激情五月 | 亚洲伊人久久综合 | 日韩欧美视频免费观看 | 激情免费视频 | 中文字幕在线一区 | 欧美一区二区三区电影 | 国产情侣一区二区三区 | 91久久国产 | 久久国产精品一区二区三区 | 国产精品久久久久精 | 日韩午夜激情视频 | 亚洲一区二区三区在线播放 | 婷婷精品久久久久久久久久不卡 | 国产成人精品免费视频大全最热 | 日韩一级精品视频在线观看 | 久久久人成影片免费观看 | 欧美激情视频一区二区三区不卡 | 国产一区二区三区 | 亚洲精品中字 | 成人片免费看 | 最新毛片在线观看 | 91亚洲国产 |