JavaScript实现旋转轮播图
程序员文章站
2022-09-08 20:46:11
最近一直在学习javascript,然后看到旋转轮播图的案例,就尝试着用js做了一个简单的轮播图,因为无法显示动态效果,所以就放个截图:
这个效果是这样的:一共...
最近一直在学习javascript,然后看到旋转轮播图的案例,就尝试着用js做了一个简单的轮播图,因为无法显示动态效果,所以就放个截图:
这个效果是这样的:一共有7张图片,它们会自动地向左滑动,然后左右箭头也可以控制轮播图的左滑和右滑,同时,如果鼠标停在图片上,那么轮播图会停止自动滑动,当鼠标移开时,将会继续向左轮播。
首先,我这里封装了两个函数(因为暂且还没有学jquery,所以用了封装函数的方法来实现),第一个函数是$函数,调用可以获取html中的元素,代码如下:
`function $(select){ if (typeof select != 'string') { console.log('传入的参数有误'); return null; } var firstchar = select.charat(0); switch(firstchar){ case '#': return document.getelementbyid(select.substr(1)); break; case '.': if (document.getelementsbyclassname){ return document.getelementsbyclassname(select.substr(1)); } else { var result = []; var allelemnts = document.getelementsbytagname('*'); console.log(allelemnts); for (var i = 0; i < allelemnts.length; i++){ var e = allelemnts[i]; var classname = e.classname; var classarr = classname.split(' '); for (var j = 0; j < classarr.length; j++){ var c = classarr[j]; if (c == select.substr(1)) { result.push(e); break; } } } return result; } break; default : return document.getelementsbytagname(select); } }`
第二个函数是一个动画函数,用json实现多条样式的动态改变,从而达到一个动画效果,代码如下: `
function animate(element, json, fun) { clearinterval(element.timer); function getstyle(element, stylename){ if(element.currentstyle){ //ie浏览器下 直接通过currentstyle来获取 //return element.currentstyle.heigh; return element.currentstyle[stylename]; }else{ var computedstyle = window.getcomputedstyle(element,null); return computedstyle[stylename]; } } var isstop = false; element.timer = setinterval(function () { isstop = true; for (var key in json){ var target = json[key]; var current; if (key == 'opacity') { //当动画的类型为透明度时 获取的值应该是浮点类型 current = parsefloat(getstyle(element, key)) || 1; } else { //其他情况 用整数类型 current = parseint(getstyle(element, key)) || 0; } var step = (target - current) / 10; if (key != 'opacity') { step = step > 0 ? math.ceil(step) : math.floor(step); } current += step; if (key == 'opacity') { if (math.abs(target - current) > 0.01) { isstop = false; } else { current = target; } element.style.opacity = current + ''; } else { if (math.abs(target-current) > math.abs(step)) { isstop = false; } else { current = target; } if (key == 'zindex'){ element.style.zindex = math.round(current); } else { element.style[key] = current + 'px'; } } } if (isstop) { clearinterval(element.timer); console.log('动画完成'); if (typeof fun == 'function') { fun(); } } }, 30); }`
接下来就要写html的部分了,因为只有几张图片,所以html的部分很简单:
<body> <div class="box"> <div class="content"> <ul> <li><a href="#"><img src="./images/1.jpg"></a></li> <li><a href="#"><img src="./images/2.jpg"></a></li> <li><a href="#"><img src="./images/3.jpg"></a></li> <li><a href="#"><img src="./images/4.jpg" class="current"></a></li> <li><a href="#"><img src="./images/5.jpg"></a></li> <li><a href="#"><img src="./images/6.jpg"></a></li> <li><a href="#"><img src="./images/7.jpg"></a></li> </ul> </div> <div class="control"> <a href="javascript:;" id="prev"></a> <a href="javascript:;" id="next"></a> </div> </div> </body>
css样式的部分也不多做叙述。
下面就是js是部分啦,代码也很简单,理清楚就好
window.onload = function(){ //定位,并给图片设置大小透明度 var json = [{ width: 630, top: 23, left: 0, zindex: 2, opacity: 0 },{ width: 630, top: 23, left: 0, zindex: 3, opacity: 0 },{ width: 630, top: 23, left: 0, zindex: 4, opacity: 0.6 },{ width: 730, top: 0, left: 125, zindex: 5, opacity: 1 },{ width: 630, top: 23, left: 350, zindex: 4, opacity: 0.6 },{ width: 630, top: 23, left: 350, zindex: 3, opacity: 0 },{ width: 630, top: 23, left: 350, zindex: 2, opacity: 0 }];
function refreshimagelocatin(index){ //默认情况下 第i张图对应第i个位置 //index=1时 第i个图对应i-1个位置 //也就是第i个图对应i-index的位置 var liarr = $('li'); for(var i = 0; i < liarr.length; i++){ var li = liarr[i]; var locationindex = i - index; console.log('i='+i); console.log('index='+index); console.log('locationindex='+locationindex); if(locationindex < 0){ locationindex += 7; } var locationdata = json[locationindex]; animate(li, locationdata, null); } } refreshimagelocatin(0); var index = 0; $('#next').onclick = function(){ index++; if(index == 7){ index = 0; } refreshimagelocatin(index); } $('#prev').onclick = function(){ index--; if(index < 0){ index = 6; } refreshimagelocatin(index); } var nextimage = $('#next').onclick; var contentbox = $('.content')[0]; //自动播放 var timer = setinterval(nextimage, 3000); //当鼠标移动到图片上,停止播放 contentbox.onmouseover = function(){ clearinterval(timer); } contentbox.onmouseout = function(){ timer = setinterval(nextimage ,3000) } }
以上就是旋转轮播图的全部内容了,给自己的学习过程做个简单的记录,也顺便巩固一下。