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

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

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

服務(wù)器之家 - 編程語(yǔ)言 - JavaScript - js教程 - 原生JS運(yùn)動(dòng)實(shí)現(xiàn)輪播圖

原生JS運(yùn)動(dòng)實(shí)現(xiàn)輪播圖

2021-12-24 15:04Bean_s js教程

這篇文章主要為大家詳細(xì)介紹了原生JS運(yùn)動(dòng)實(shí)現(xiàn)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

原生JS運(yùn)動(dòng)實(shí)現(xiàn)輪播圖

**基本原理:**通過(guò)控制包含n張圖片的ul的left值來(lái)實(shí)現(xiàn)圖片自動(dòng)運(yùn)動(dòng)的效果,其中列表中l(wèi)i元素的個(gè)數(shù)為n,第一個(gè)li和最后一個(gè)li里存放的圖片應(yīng)為同一張圖片,當(dāng)圖片運(yùn)動(dòng)到最后一張時(shí),將ul的left值設(shè)為0,即可達(dá)到圖片無(wú)線(xiàn)輪播的效果。

運(yùn)動(dòng)函數(shù)的實(shí)現(xiàn)

函數(shù)需傳入元素(即需要參與運(yùn)動(dòng)的元素)、目標(biāo)值(以對(duì)象的形式呈現(xiàn),如{left: 300})、callback(回調(diào)函數(shù))。

?
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
//多物體多值運(yùn)動(dòng)+回調(diào)機(jī)制
function startMove(dom, attrObj, callback) {
 var key = true;
 var iSpeed = null,
  iCur = null;
 clearInterval(dom.timer);
 if (key) {
  dom.timer = setInterval(function() {
  //bStop用來(lái)判斷是否開(kāi)始執(zhí)行回調(diào)函數(shù)
   var bStop = true;
   //判斷傳入目標(biāo)值中的“鍵”類(lèi)型是否為opacity
   for (var attr in attrObj) {
   //若要改變的樣式為opacity,則將元素的opacity擴(kuò)大100被進(jìn)行操作
    if (attr === 'opacity') {
     iCur = parseFloat(getStyle(dom, attr)) * 100;
    } else {
     iCur = parseInt(getStyle(dom, attr));
    }
    //運(yùn)動(dòng)速度設(shè)為目標(biāo)值減去當(dāng)前值的一半,即當(dāng)前狀態(tài)離目標(biāo)值越接近,運(yùn)動(dòng)速度越小
    iSpeed = (attrObj[attr] - iCur) / 2;
    //對(duì)速度進(jìn)行取整
    iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
    if (attr === 'opacity') {
     dom.style.opacity = (iCur + iSpeed) / 100;
    } else {
     dom.style[attr] = iCur + iSpeed + 'px';
    }
    if (iCur !== attrObj[attr]) {
     bStop = false;
    }
   }
   //當(dāng)bStop為true時(shí),元素的所有樣式均已達(dá)到目標(biāo)值,清理定時(shí)器并執(zhí)行回調(diào)函數(shù)
   if (bStop) {
    clearInterval(dom.timer);
    typeof callback == 'function' && callback();
   }
  }, 30)
 }
 if (!key) {
 
 }
}
//用來(lái)獲取元素實(shí)時(shí)的樣式值
function getStyle(elem, prop){
 if (window.getComputedStyle){
  return window.getComputedStyle(elem, null)[prop];
 }
}

HTML部分

HTML中包含一個(gè)div,用來(lái)顯示當(dāng)前要播放的圖片,該div中又包含一個(gè)ul(用來(lái)存放所有包含圖片的li)、三個(gè)div(其中兩個(gè)充當(dāng)圖片左右切換的按鈕,第三個(gè)存放圖片索引點(diǎn),通過(guò)點(diǎn)擊索引也可切換到要查看的圖片),代碼如下:

?
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
<div class="wrapper">
 <ul class="sliderPage">
  <li>
   <img src="./image/dog/阿拉斯加.jpeg"/>
  </li>
  <li>
   <img src="./image/dog/比熊.jpeg"/>
  </li>
  <li>
   <img src="./image/dog/邊牧.jpeg"/>
  </li>
  <li>
   <img src="./image/dog/柯基.jpeg"/>
  </li>
  <li>
   <img src="./image/dog/阿拉斯加.jpeg"/>
  </li>
 </ul>
 <div class="btn leftBtn">&lt;</div>
 <div class="btn rightBtn">&gt;</div>
 <div class="sliderIndex">
  <span class="active"></span>
  <span></span>
  <span></span>
  <span></span>
 </div>
</div>

CSS代碼

此處采用的為內(nèi)聯(lián)樣式表

?
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
67
68
<style>
 *{
  margin: 0;
  padding: 0;
  list-style: none;
 }
 .wrapper{
  position: relative;
  margin: 100px auto 0;
  width: 600px;
  height: 360px;
  overflow: hidden;
 }
 .wrapper .sliderPage{
  position: absolute;
  left: 0;
  width: 3000px;
  height: 360px;
 }
 .wrapper .sliderPage li{
  width: 600px;
  height: 360px;
  float: left;
 }
 .wrapper .sliderPage li img{
  width: 100%;
  height: 100%;
 }
 .btn{
  position: absolute;
  top: 50%;
  width: 20px;
  height: 20px;
  color: #fff;
  text-align: center;
  line-height: 20px;
  background-color: #000;
  opacity: 0.2;
  cursor: pointer;
 }
 .leftBtn{
  left: 5px;
 }
 .rightBtn{
  right: 5px;
 }
 .wrapper:hover .btn{
  opacity: 0.8;
 }
 .sliderIndex{
  position: absolute;
  width: 100%;
  bottom: 10px;
  cursor: pointer;
  text-align: center;
 }
 span{
  width: 8px;
  height: 8px;
  background-color: #cccccc;
  border-radius: 50%;
  display: inline-block;
  margin-right: 5px;
 }
 .active{
  background-color: orange;
 }
</style>

圖片自動(dòng)運(yùn)動(dòng)及點(diǎn)擊運(yùn)動(dòng)事件綁定

要點(diǎn):

1、當(dāng)圖片運(yùn)動(dòng)到最后一張時(shí)(顯示圖片為第一張圖片),將ul的left值設(shè)為0即可實(shí)現(xiàn)無(wú)限輪播;
2、圖片每次運(yùn)動(dòng)的值為li的寬度;
3、圖片的運(yùn)動(dòng)需要一定的時(shí)間,因此在圖片運(yùn)動(dòng)過(guò)程中應(yīng)禁止產(chǎn)生其它定時(shí)器,否則會(huì)造成運(yùn)動(dòng)尺寸混亂而導(dǎo)致圖片輪播出現(xiàn)問(wèn)題,這里用lock來(lái)進(jìn)行實(shí)現(xiàn),在ul運(yùn)動(dòng)過(guò)程中將lock值設(shè)為false,運(yùn)動(dòng)結(jié)束后又將lock值設(shè)為true;
4、通過(guò)index值來(lái)實(shí)現(xiàn)索引顯示圖片功能,圖片輪播過(guò)程中,index初始值為0,當(dāng)圖片向右輪播時(shí)index值加1,圖片向左輪播時(shí),index值減1,index值為0時(shí),若讓圖片向左輪播,則將index值設(shè)為n(li個(gè)數(shù))并進(jìn)行輪播,而當(dāng)index值為3且圖片向右輪播時(shí),在ul運(yùn)動(dòng)完成后將index值設(shè)為0;

?
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
67
68
69
70
71
72
73
var timer = null;
var sliderPage = document.getElementsByTagName('ul')[0];
var moveWidth = sliderPage.children[0].offsetWidth;
var num = sliderPage.children.length - 1;
var leftBtn = document.getElementsByClassName('leftBtn')[0];
var rightBtn = document.getElementsByClassName('rightBtn')[0];
var lock = true;
var index = 0;
var indexArray = document.getElementsByClassName('sliderIndex')[0].getElementsByTagName('span');
//索引切換
for (var i = 0; i < indexArray.length; i ++){
 (function(myindex){
  indexArray[myindex].onclick = function(){
   lock = false;
   clearTimeout(timer);
   index = myindex;
   changeIndex(index);
   startMove(sliderPage, {left: -index * moveWidth}, function(){
    lock = true;
    timer = setTimeout(autoMove, 3000);
   })
  }
 }(i))
}
//圖片運(yùn)動(dòng)過(guò)程中改變index點(diǎn)的樣式
function changeIndex(index){
 for (var i = 0; i < indexArray.length; i++){
  indexArray[i].className = '';
 }
 indexArray[index].className = 'active';
}
timer = setTimeout(autoMove, 3000);
//向左翻
leftBtn.onclick = function (){
 autoMove('right->left');
}
//向右翻
rightBtn.onclick = function (){
 autoMove('left->right');
}
//direction
//默認(rèn)輪播方向 'left->right' / undefined
//點(diǎn)擊left按鈕 'right->left'
function autoMove(direction){
 clearTimeout(timer);
 if (lock){
  lock = false;
 
  if (!direction || direction === 'left->right'){
   index++;
   startMove(sliderPage, {left: sliderPage.offsetLeft - moveWidth}, function(){
    if (sliderPage.offsetLeft === - num * moveWidth){
     index = 0;
     sliderPage.style.left = '0px';
    }
    timer = setTimeout(autoMove, 3000);
    lock = true;
    changeIndex(index);
   });
  }else if(direction === 'right->left'){
   if (sliderPage.offsetLeft === 0){
    index = num;
    sliderPage.style.left = - num * moveWidth + 'px';
   }
   index--;
   startMove(sliderPage, {left: sliderPage.offsetLeft + moveWidth}, function () {
    timer = setTimeout(autoMove, 3000);
    lock = true;
    changeIndex(index);
   })
  }
 }
}

以上即為通過(guò)原生JS運(yùn)動(dòng)所實(shí)現(xiàn)的圖片輪播。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/Bean_s/article/details/112002232

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一区视频 | 国产精品久久久久久久久图文区 | 日韩精品一区二区三区丰满 | 色av综合网| 色网在线看 | 天天躁日日躁aaaaxxxx | 久久久久久国产精品美女 | 国产一级视频在线观看 | 久久这里只有国产精品 | 亚洲精品一二三 | 国产精品区二区三区日本 | 亚洲福利国产 | 在线中文字幕视频 | 欧美自拍一区 | 国产精品毛片在线 | 国产欧美自拍 | 女人久久久久 | 日本高清视频在线 | 亚洲在线一区二区 | 国产黄色一级录像 | 一级毛片免费视频 | 日韩精品视频在线 | 中文字幕第一页在线 | 欧美成人综合在线 | 亚洲一区二区在线播放 | 中文字幕一区二区三区久久 | 亚洲日本乱码一区两区在线观看 | 日韩精品免费视频 | 日韩精品一区二区三区中文在线 | 高清一区二区三区 | 污色视频在线观看 | 九九热精品视频 | 国产 日韩 欧美 中文 在线播放 | 亚洲第一色 | 超碰一区二区 | 久久国产精品久久久久久久久久 | 综合av在线| 亚洲欧美综合精品久久成人 | 91视频免费播放 | 久久久精品久久久 | 日韩在线精品 |