html !DOCTYPE htmlhtmlhead lang="en" meta charset="UTF-8" title/title link rel="stylesheet" href="css/swiper.css" style type="text/css" * { margin: 0; padding: 0; } ol { list-style: none; } /* ol li{ position: absolute; left: 15px; top :20p
html
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="css/swiper.css"> <style type="text/css"> * { margin: 0; padding: 0; } ol { list-style: none; } /* ol li{ position: absolute; left: 15px; top :20px; } */ .wrapper { position: relative; width: 670px; height: 240px; margin: 100px auto; } </style> </head> <body> <div class="wrapper"> <ul id="box"> <li><img src="images/1.jpg" alt="" /></li> <li><img src="images/2.jpg" alt="" /></li> <li><img src="images/3.jpg" alt="" /></li> <li><img src="images/4.jpg" alt="" /></li> <li><img src="images/5.jpg" alt="" /></li> <li><img src="images/6.jpg" alt="" /></li> </ul> <ol id="uu"> <!-- <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> --> </ol> </div> <script src="js/common.js"></script> <script src="js/move1.1.0.js"></script> <script src="js/swiper.js"></script> <script> var swiper = new Swiper('.wrapper'); </script> </body> </html>
move1.1.0.js
// 如果多个参数需要选填, 把多个参数当成一个对象, 这样就没有先后顺序问题了 function move(ele, attr, target, options) { // 把options里面传入的参数, 替换__default const __default = { time: 500, callback: null, ...options } let $box = ele; if(typeof ele == 'string') { $box = $(ele); } clearInterval($box.timer); let init = parseFloat(getStyle($box, attr)); if(attr == 'opacity') { init *= 100; } // (目标值 - 初始值) / 次 = (时间 / 频率) let speed = (target - init) / (__default.time / 10); $box.timer = setInterval(function () { init += speed; if ((speed <= 0 && init <= target) || (speed >= 0 && init >= target)) { // 终止运动条件 init = target; clearInterval($box.timer); if (typeof __default.callback == 'function') __default.callback($box); } if(attr == 'opacity') { $box.style[attr] = init / 100 } else { $box.style[attr] = init + 'px'; } }, 10) }
swiper.js
function Swiper(ele, index=0) { // 接受展示图片的大盒子 this.$ele = $(ele); // 当前展示图片的索引 this.index = index; // 设置定时器 this.timer = null; this.$imgAll = $A('#box li'); this.$uu = $('#uu'); this.createTips(this.$imgAll.length); this.$tipsAll = this.$uu.children; this.showImage(this.index); this.autoPaly(); this.event(); } // 展示对应图片 Swiper.prototype.showImage = function(index) { // 合法值判断 if(index >= this.$imgAll.length) { index = 0; } this.index = index; for(let i = 0; i < this.$imgAll.length; i++) { // this.$imgAll[i].style.display = 'none'; move(this.$imgAll[i],'opacity',0,{ callback($ele){ $ele.style.display = 'none'; } }) this.$tipsAll[i].classList.remove('current'); } this.$imgAll[index].style.display = 'block'; move(this.$imgAll[index],'opacity',100) this.$tipsAll[index].classList.add('current'); } // 自动播放 Swiper.prototype.autoPaly = function() { clearInterval(this.timer); this.timer = setInterval(() => { this.showImage(++this.index); }, 2000) } Swiper.prototype.createTips = function(count) { for(let i = 0; i < count; i++) { const $li = document.createElement('li'); $li.index= i; // $li.innerHTML = i + 1; this.$uu.appendChild($li); } } // 把事件处理程序都放到这里来 Swiper.prototype.event = function() { var self = this; this.$uu.onclick = function(e) { e = e || window.event; const target = e.target || e.srcElement; if(target.nodeName == 'LI') { self.showImage(target.index); self.autoPaly(); } } }
common.js
// 判断数组是否还有这个元素 function include(arr, item) { for(var i = 0; i < arr.length; i++) { if(arr[i] === item) { return true; } } return false; } // 返回元素所在的位置 function indexOf(arr, item) { for(var i = 0; i < arr.length; i++) { if(arr[i] === item) { return i; } } return -1; } // 任意区间随机整数 function getRandom(max, min) { min = min || 0; if(min > max) { var a = min; min = max; max = a; } return min + Math.floor(Math.random() * (max - min + 1)); } // 数组去重 function noRepeat(arr) { var __arr = []; for(var i = 0; i < arr.length; i++) { // 存在返回true, 不存在返回false var bool = __arr.indexOf(arr[i]) if(bool == -1) { __arr.push(arr[i]); } } return __arr; } function $(ele) { return document.querySelector(ele); } function $A(ele) { return document.querySelectorAll(ele); } function getRandomColor() { var str = '0123456789abcdef'; var color = '#'; for(var i = 0; i < 6; i++) { color += str[getRandom(str.length - 1)]; } return color; } // 格式化url, 获取参数 function parseUrl(url) { var obj = {}; url = url.split('?')[1].split('#')[0]; url = url.split('&'); url.forEach(function (x) { var arr = x.split('='); obj[arr[0]] = arr[1]; }) return obj; } // 获取非行内样式 function getStyle(ele, attr) { if(window.getComputedStyle) { return window.getComputedStyle(ele, null)[attr] } return ele.currentStyle[attr]; }