今天学到轮播图以前看似很简单,今天一做对于我这新手还是挺难,主要还是逻辑思维。
现在就对自己做的轮播图在整体的一步一步的写一下:
HTML+css代码如下
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } .a1 { width: 500px; height: 200px; border: 1px solid red; margin: 0 auto; position: relative; overflow: hidden; } li { float: left; display: inline-block; } .a2 { position: relative; width: 500px; height: 200px; } ul { position: absolute; top: 0; left: 0; width: 3000px; margin: 0; padding: 0; list-style: none; } img { display: inline; width: 500px; height: 200px; } .a3 { height: 50px; position: absolute; display: block; width: 500px; top: 75px; display: none; cursor: pointer; color: white; } .a3 #left { text-align: center; position: absolute; left: 0; background-color: blue; font-size: 50px; opacity:0.3; } .a3 #right { text-align: center; position: absolute; margin-left: 460px; background-color: blue; font-size: 50px; opacity:0.3; } ol li { width: 20px; text-align: center; margin-left: 5px; background-color: white; color: black; cursor: pointer; } ol { position: absolute; top: 180px; } .a5 { background-color: yellow; } </style> </head> <body> <div id="a1" class="a1"> <div id="a2" class="a2"> <ul> <li><img src="img/轮播图1.jpg" /></li> <li><img src="img/轮播图2.jpg" /></li> <li><img src="img/轮播图3.jpg" /></li> </ul> <ol> </ol> </div> <div class="a3"> <span id="left"><</span> <span id="right">></span> </div> </div> </body> </html>
解决兼容性js代码如下:
1 <script src="js/common.js"> 2 //获取ID 3 function dgb(id) { 4 return document.getElementById(id); 5 } 6 7 // 解决firstElementChild的兼容性问题,获取第一个子元素 8 function getfirstElementChild(parent) { 9 if(parent.firstElementChild) { 10 return parent.firstElementChild; 11 } 12 var node, nodes = parent.childNodes, 13 i = 0; 14 while(node = nodes[i++]) { 15 if(node.nodeType === 1) { 16 return node 17 } 18 } 19 return null; 20 } 21 22 //解决innertext兼容性问题 给 "element"元素 设置 "cotent"内容 23 function setInnerText(element, cotent) { 24 if(typeof element.innerText === 'string') { 25 element.innerText = cotent; 26 } else { 27 element.textContent = cotent; 28 } 29 } 30 31 //动态创建表格 32 function createTable(parent, headData, bodyData) { 33 var table = createHead(parent, headData); 34 createBody(table,bodyData); 35 } 36 37 //表头 38 function createHead(parent, headData) { 39 //表头 40 var table = document.createElement('table'); 41 parent.appendChild(table); 42 table.border = '1px'; 43 table.width = '500px'; 44 table.cellSpacing = '0'; 45 46 var thead = document.createElement('thead'); 47 table.appendChild(thead); 48 49 var tr = document.createElement('tr'); 50 thead.appendChild(tr); 51 tr.style.height = '50px'; 52 tr.style.backgroundColor = 'lightgray'; 53 //生成表头中的列 54 headData.forEach(function(item) { 55 var th = document.createElement('th'); 56 tr.appendChild(th); 57 setInnerText(th, item); 58 }); 59 return table; 60 } 61 62 //数据行 63 function createBody(table,bodyData) { 64 var tbody = document.createElement('tbody'); 65 table.appendChild(tbody); 66 tbody.style.textAlign = 'center'; //居中显示 67 68 bodyData.forEach(function(item) { 69 //创建行 70 tr = document.createElement('tr'); 71 tbody.appendChild(tr); 72 73 //创建列 74 //遍历对象 75 for(var key in item) { 76 //inem[key] 77 var td = document.createElement('td'); 78 tr.appendChild(td); 79 setInnerText(td, item[key]); 80 } 81 //操作列 82 td = document.createElement('td'); 83 tr.appendChild(td); 84 //创建删除的超链接 85 var link = document.createElement('a'); 86 link.href = 'javascript:void(0)'; 87 td.appendChild(link); 88 setInnerText(link, '删除'); 89 //注册时间 90 link.onclick = linkClick; 91 }); 92 93 function linkClick() { 94 //提示 95 var r = confirm('是否删除'); 96 //移除元素 97 if(r) { 98 var tr = this.parentNode.parentNode; 99 tbody.removeChild(tr); 100 } 101 } 102 } 103 //动画js 104 function dong(element,target,callback) { 105 var step = 10; 106 if (element.c) { 107 clearInterval(element.c); 108 } 109 element.c = setInterval(function() { 110 111 var b = element.offsetLeft; 112 if (b > target) { 113 step = - Math.abs(step); 114 } 115 if(Math.abs(b - target) <= Math.abs(step)) { 116 element.style.left = target + 'px';//防止超出500px 117 clearInterval(element.c); 118 if (callback) { 119 callback(); 120 } 121 122 return;//返回结束,不继续往下执行 123 } 124 b += step; 125 element.style.left = b + 'px'; 126 }, 5) 127 } 128 </script>
轮播图js代码如下:
1 <script type="text/javascript"> 2 var c = 2000; 3 var box = dgb('a1'); 4 var mbox = dgb('a2'); 5 var ul = mbox.children[0]; 6 var ol = mbox.children[1]; 7 8 //获取箭头里的元素 9 var jiantou = box.children[1]; 10 var left = dgb('left'); 11 var right = dgb('right'); 12 //获取图片宽度 13 var imgWidth = mbox.offsetWidth; 14 //动态生成序号 15 //01获取图片的个数 16 var imgShu = ul.children.length; 17 18 for(i = 0; i < imgShu; i++) { 19 //02创建序号 20 var li = document.createElement('li'); 21 ol.appendChild(li); 22 setInnerText(li, i + 1) 23 //记录自己的索引 24 li.index = i; 25 //给序号li注册点击事件 26 li.onclick = fun; 27 if(i === 0) { 28 li.className = 'a5'; 29 } 30 } 31 32 function fun() { 33 //让图片动起来 34 dong(ul, -this.index * imgWidth); 35 //高亮 36 for(i = 0; i < imgShu; i++) { 37 li = ol.children[i]; 38 li.className = ''; 39 } 40 this.className = 'a5'; 41 //让第一张默认选中 42 index = this.index; 43 } 44 //箭头的出现和后退前进 45 46 box.onmouseenter = function() { 47 jiantou.style.display = 'block'; 48 clearInterval(s); 49 } 50 box.onmouseleave = function() { 51 jiantou.style.display = 'none'; 52 s = setInterval(function(){ 53 right.click(); 54 },c); 55 } 56 //点击右键头下一张 57 var index = 0; 58 right.onclick = function(){ 59 //等下一次点击时,索引等于最后一张时, 60 //让索引等于0并令ul的坐标等于第一张, 61 //再动画形式到第二张 62 //也就是复制图点击下一张时, 63 //先瞬间到第一张在以动画的形式到第二张 64 if (index === imgShu) { 65 index = 0; 66 ul.style.left = 0 + 'px' 67 } 68 69 index++; 70 if(index < imgShu){ 71 ol.children[index].click(); 72 }else{ 73 //移动画的方式一到最后一张 74 dong(ul,-index * imgWidth); 75 for(i = 0; i < imgShu; i++) { 76 li = ol.children[i]; 77 li.className = ''; 78 } 79 //选中第一个序号 80 ol.children[0].className = 'a5'; 81 } 82 } 83 //点击左箭头上一张 84 left.onclick = function(){ 85 if(index === 0){ 86 index = imgShu; 87 ul.style.left = -index * imgWidth + 'px' 88 } 89 index--; 90 if(index >= 0){ 91 ol.children[index].click(); 92 } 93 } 94 95 //4无缝滚动 96 //4.1复制第一个li的图片 97 var cloneLi = ul.children[0].cloneNode(true); 98 ul.appendChild(cloneLi); 99 //自动 100 var s = setInterval(function(){ 101 right.click(); 102 },c) 103 </script>
第一步:
先获取所有元素
第二步:
一. 动态生成序号
0获取图片宽度
1获取图片的个数
2创建序号
3给序号li注册点击事件
3.1记录自己的索引
4让图片动起来
5让点中的高亮
6让第一张默认选中
1 var imgWidth = mbox.offsetWidth; 2 //动态生成序号 3 //01获取图片的个数 4 var imgShu = ul.children.length; 5 for(i = 0; i < imgShu; i++) { 6 //02创建序号 7 var li = document.createElement('li'); 8 ol.appendChild(li); 9 setInnerText(li, i + 1) 10 //记录自己的索引 11 li.index = i; 12 //给序号li注册点击事件 13 li.onclick = fun; 14 if(i === 0) { 15 li.className = 'a5'; 16 } 17 } 18 19 function fun() { 20 //让图片动起来 21 dong(ul, -this.index * imgWidth); 22 //高亮 23 for(i = 0; i < imgShu; i++) { 24 li = ol.children[i]; 25 li.className = ''; 26 } 27 this.className = 'a5'; 28 //让第一张默认选中 29 index = this.index; 30 }
二. 箭头的出现和后退前进
1鼠标进入事件
2鼠标移出事件
3点击右键头下一张
3.1 复制第一个li的图片
3.2 等下一次点击时,索引等于最后一张时,让索引等于0并令ul的坐标等于第一张,再动画形式到第二张,也就是复制图点击下一张时,先瞬间到第一张在以动画的形式到第二张,选中第一个序号
4点击左箭头上一张
4.1如上相反
1 //箭头的出现和后退前进 2 3 box.onmouseenter = function() { 4 jiantou.style.display = 'block'; 5 clearInterval(s); 6 } 7 box.onmouseleave = function() { 8 jiantou.style.display = 'none'; 9 s = setInterval(function(){ 10 right.click(); 11 },c); 12 } 13 //点击右键头下一张 14 var index = 0; 15 right.onclick = function(){ 16 //等下一次点击时,索引等于最后一张时, 17 //让索引等于0并令ul的坐标等于第一张, 18 //再动画形式到第二张 19 //也就是复制图点击下一张时, 20 //先瞬间到第一张在以动画的形式到第二张 21 if (index === imgShu) { 22 index = 0; 23 ul.style.left = 0 + 'px' 24 } 25 26 index++; 27 if(index < imgShu){ 28 ol.children[index].click(); 29 }else{ 30 //移动画的方式一到最后一张 31 dong(ul,-index * imgWidth); 32 for(i = 0; i < imgShu; i++) { 33 li = ol.children[i]; 34 li.className = ''; 35 } 36 //选中第一个序号 37 ol.children[0].className = 'a5'; 38 } 39 } 40 //点击左箭头上一张 41 left.onclick = function(){ 42 if(index === 0){ 43 index = imgShu; 44 ul.style.left = -index * imgWidth + 'px' 45 } 46 index--; 47 if(index >= 0){ 48 ol.children[index].click(); 49 } 50 } 51 52 //4无缝滚动 53 //4.1复制第一个li的图片 54 var cloneLi = ul.children[0].cloneNode(true); 55 ul.appendChild(cloneLi);
三. 自动滚动
1自动滚动
2鼠标移入停止定时器
3鼠标移出开始定时器
1 var s = setInterval(function(){ 2 right.click(); 3 },c)
来源:https://www.cnblogs.com/hewenwu199712/p/9801035.html