JavaScriptは動的な輪播図の効果を実現します.
47032 ワード
機能の説明:
1.マウスは左右の矢印で表示され、マウスは矢印から離れて隠します.
2.下の小さな円を動的に追加し、イベントをクリックし、小さな円のクリックイベントと右の矢印をクリックしてイベントを同期させます.
3.最初の写真をコピーして、ulに追加すると、最後に動的に画像を追加することができます.
4.矢印にバインドしてイベントをクリックし、画像をシームレスに順次まきます.
5.自動ルーニーを実現する(アニメーション関数)
具体的な実現コード:
1.マウスを左右の矢印に移動します.マウスは矢印から離れて隠します.
①右矢印のクリックイベント
具体的な実現コードは以下の通りです.
HTMLコード:
CSSコード:
詳細JavaScriptコード(index.js)
1.マウスは左右の矢印で表示され、マウスは矢印から離れて隠します.
2.下の小さな円を動的に追加し、イベントをクリックし、小さな円のクリックイベントと右の矢印をクリックしてイベントを同期させます.
3.最初の写真をコピーして、ulに追加すると、最後に動的に画像を追加することができます.
4.矢印にバインドしてイベントをクリックし、画像をシームレスに順次まきます.
5.自動ルーニーを実現する(アニメーション関数)
具体的な実現コード:
1.マウスを左右の矢印に移動します.マウスは矢印から離れて隠します.
1 con.addEventListener('mouseenter', function() {
2 arrow_l.style.display = 'block'; // display block
3 arrow_r.style.display = 'block';
4 });
5 con.addEventListener('mouseleave', function() {
6 arrow_l.style.display = 'none'; // display none
7 arrow_r.style.display = 'none';
8 });
2.下の小さな円を動的に追加し、イベントをクリックし、小さな円のクリックイベントと右の矢印をクリックしてイベントを同期させます. 1 for(var i = 0; i < ul.children.length; i++) {
2 var li = document.createElement('li');
3 li.setAttribute('index', i); //
4 ol.appendChild(li); // li ol
5 //
6 li.addEventListener('click', function() {
7 // ,
8 for(var i = 0; i < ol.children.length; i++) { //
9 ol.children[i].className = '';
10 }
11 //
12 this.className = 'current';
13 var index = this.getAttribute('index'); //
14 // index num circle,
15 num = index;
16 circle = index;
17 animate(ul, - index * conWidth);
18 })
19 }
3.最初の写真をコピーして、ulに追加すると、最後に動的に画像を追加することができます.1 //
2 var first = ul.children[0].cloneNode(true); // true
3 ul.appendChild(first); // ul
4.矢印にバインドしてイベントをクリックし、画像をシームレスに順次まきます.①右矢印のクリックイベント
1 var num = 0; //
2 var circle = 0; //
3 var flag = true; // flag
4 //
5 arrow_r.addEventListener('click', function() {
6 if(flag) {
7 //
8 flag = false;
9 // , left 0 , num
10 if(num == ul.children.length - 1) {
11 ul.style.left = 0;
12 num = 0;
13 }
14 num++;
15 animate(ul, - num * conWidth, function() {
16 //
17 flag = true;
18 });
19 //
20 circle++;
21 /* if(circle == ol.children.length) {
22 circle = 0;
23 } */
24 // , circle
25 circle == ol.children.length ? circle = 0 : circle;
26 circleChange(); // ( )
27 }
28 })
②左矢印のクリックイベント 1 arrow_l.addEventListener('click', function() {
2 if(flag) {
3 //
4 flag = false;
5 // , left
6 if(num == 0) {
7 num = ul.children.length - 1;
8 ul.style.left = - num * conWidth + 'px';
9 }
10 num--;
11 animate(ul, - num * conWidth, function() {
12 flag = true;
13 });
14 //
15 circle--;
16 // circle < 0 , ( 3)
17 circle < 0 ? circle = ol.children.length - 1 : circle;
18 circleChange();
19 }
20 })
circle Change();関数コード1 // ( , )
2 function circleChange() {
3 //
4 for(var i = 0; i < ol.children.length; i++) {
5 ol.children[i].className = '';
6 }
7 ol.children[circle].className = 'current';
8 }
5.自動ルーニーを実現する(アニメーション関数)1 // ,
2 var timer = setInterval(function() {
3 //
4 arrow_r.click();
5 }, 2000);
アニメーション関数animex.js(ps:これを下のindex.jsに書き込んでいません.これは自分で入れます.anime.jsファイルとして導入したり、直接にあなたのjsコードに貼り付けたりできます.) 1 // obj
2 // target
3 // callback
4 function animate(obj, target, callback) {
5 clearInterval(obj.timer);
6 obj.timer = setInterval(function() {
7 var step = (target - obj.offsetLeft) / 10; // step
8 step = step > 0 ? Math.ceil(step) : Math.floor(step); // ,
9 if(obj.offsetLeft == target) {
10 clearInterval(obj.timer);
11 // if(callback) { //
12 // callback(); // ,
13 // }
14 // && , callback callback()
15 callback && callback();
16 }
17 obj.style.left = obj.offsetLeft + step + 'px';
18 }, 15)
19 }
具体的な実現コードは以下の通りです.
HTMLコード:
1 <div class="con">
2 <i class="icon iconfont iconarrow_left arrow-l">i>
3 <i class="icon iconfont iconarrow_right arrow-r">i>
4 <ul>
5 <li>
6 <a href="javascript:;"><img src="images/img1.jpg" alt="">a>
7 li>
8 <li>
9 <a href="javascript:;"><img src="images/img2.jpg" alt="">a>
10 li>
11 <li>
12 <a href="javascript:;"><img src="images/img3.jpg" alt="">a>
13 li>
14 <li>
15 <a href="javascript:;"><img src="images/img4.jpg" alt="">a>
16 li>
17 <li>
18 <a href="javascript:;"><img src="images/img5.jpg" alt="">a>
19 li>
20 ul>
21 <ol>
22 ol>
23 div>
ps:左右の小さな矢印はIconfontアイコンを使っています.
CSSコード:
1
詳細JavaScriptコード(index.js)
1 window.addEventListener('load', function() { //
2 //
3 var arrow_l = document.querySelector('.arrow-l');
4 var arrow_r = document.querySelector('.arrow-r');
5 var con = document.querySelector('.con');
6 var conWidth = con.offsetWidth;
7 // ,
8 con.addEventListener('mouseenter', function() {
9 arrow_l.style.display = 'block'; // display block
10 arrow_r.style.display = 'block';
11 //
12 clearInterval(timer);
13 timer = null; //
14 });
15 con.addEventListener('mouseleave', function() {
16 arrow_l.style.display = 'none'; // display none
17 arrow_r.style.display = 'none';
18 //
19 timer = setInterval(function() {
20 //
21 arrow_r.click(); //
22 }, 2000);
23 });
24
25 var ul = con.querySelector('ul');
26 var ol = con.querySelector('ol');
27 //
28 for(var i = 0; i < ul.children.length; i++) {
29 var li = document.createElement('li');
30 //
31 li.setAttribute('index', i);
32 ol.appendChild(li);
33 //
34 li.addEventListener('click', function() {
35 // ,
36 for(var i = 0; i < ol.children.length; i++) { //
37 ol.children[i].className = '';
38 }
39 //
40 this.className = 'current';
41 var index = this.getAttribute('index'); //
42 // index num circle,
43 num = index;
44 circle = index;
45 animate(ul, - index * conWidth);
46 })
47 }
48 // ( )
49 ol.children[0].className = 'current';
50 //
51 var first = ul.children[0].cloneNode(true); // true
52 ul.appendChild(first); // ul
53
54 var num = 0; //
55 var circle = 0; //
56 var flag = true; // flag
57 //
58 arrow_r.addEventListener('click', function() {
59 if(flag) {
60 //
61 flag = false;
62 // , left 0 , num
63 if(num == ul.children.length - 1) {
64 ul.style.left = 0;
65 num = 0;
66 }
67 num++;
68 animate(ul, - num * conWidth, function() {
69 //
70 flag = true;
71 });
72 //
73 circle++;
74 /* if(circle == ol.children.length) {
75 circle = 0;
76 } */
77 // , circle
78 circle == ol.children.length ? circle = 0 : circle;
79 circleChange(); //
80 }
81 })
82
83 //
84 arrow_l.addEventListener('click', function() {
85 if(flag) {
86 //
87 flag = false;
88 // , left
89 if(num == 0) {
90 num = ul.children.length - 1;
91 ul.style.left = - num * conWidth + 'px';
92 }
93 num--;
94 animate(ul, - num * conWidth, function() {
95 flag = true;
96 });
97 //
98 circle--;
99 // circle < 0 , ( 3)
100 if(circle < 0) {
101 circle = ol.children.length - 1;
102 }
103 circleChange();
104 }
105 })
106 // ( , )
107 function circleChange() {
108 //
109 for(var i = 0; i < ol.children.length; i++) {
110 ol.children[i].className = '';
111 }
112 ol.children[circle].className = 'current';
113 }
114 // ,
115 var timer = setInterval(function() {
116 //
117 arrow_r.click();
118 }, 2000);
119 })