【原】运动版的轮播图,有左右按钮和单独分页

运动版的轮播图,有左右按钮和单独分页

这个例子重点在于:

  • 运动框架的复习,要灵活运动回调函数
  • 始终以全局变量iNum来控制oUl的移动目的地,每次有任何动作,都是先判断iNum并改变iNum后去调用运动函数
  • 刚才在复查代码的时候发现个奇怪的现象,在ie11和cent browser打开的时候居然不会滚动,iNum倒是在变化,突然想到之前在看妙味课堂的时候有老师提到一句,给要运动的元素,在加上position:absolute后,如果不加上left:0;top:0会有兼容问题,所以,我给oUl加上了left:0;top:0;就解决了问题。

<style>

ul,h2,p{

    padding: 0;margin: 0;list-style: none;

}

#wrap{

    width: 600px;

    height: 450px;

    border: 1px solid black;

    margin: 100px auto;

    position: relative;

    overflow: hidden;

}

img{

    width: 600px;height: 450px;

}

ul{

    overflow: hidden;

    position: absolute;

}

#list{

    width: 3600px;

    left: 0;top: 0;

}

li{

 float: left;

}

span{

    position: absolute; 

    width: 40px;height: 40px;

    font-weight: bold;

    font-size: 34px;

    line-height: 40px;

    opacity: 0.6;

    text-align: center;

    top: 50%;

    margin-top: -20px;

    background: white;

    z-index: 1;

}

#left{

    left: 0;

}

#right{

    right: 0;

}

span:hover{

    cursor: pointer;

    background: orangered;

}

#btns{

    bottom: 10px;right: 10px;

}

#btns li{

    width: 15px;height: 15px;

    background: orange;

    margin: 4px;

    cursor: pointer;

}

#btns li.active{

    background: orangered;

}

</style>

<script type="text/javascript">

window.onload = function(){

 var oUl = document.getElementById(‘list‘);

 var aLi = oUl.getElementsByTagName(‘li‘);

 var aSpan = document.getElementsByTagName(‘span‘);

 var oBtn = document.getElementById(‘btns‘);

 var aBtn = oBtn.getElementsByTagName(‘li‘);

 var aImg = document.getElementsByTagName(‘img‘);

 var timerAuto = null;

 var iNum = 0;

 var newTarget = 0;

 var w = aImg[0].offsetWidth;

 

 function getStyle(obj,attr){

 return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj,false)[attr];

 }

 

 function doMove(obj,attr,dir,target,endFn){

        dir=parseInt(getStyle(obj,attr))<target?dir:-dir;

        clearInterval(obj.timer);

        obj.timer=setInterval(function(){

 var speed=parseInt(getStyle(obj,attr))+dir;

 if(speed>target&&dir>0 || speed<target&&dir<0){

                speed=target;

 }

            obj.style[attr]=speed+‘px‘;

 if(speed==target){

                clearInterval(obj.timer);

                endFn&&endFn();

 }

 },30);

 }

 

 function changeColor(index){

 for (var i=0; i<aBtn.length; i++) {

            aBtn[i].className = ‘‘;

 }

        aBtn[index].className = ‘active‘;

 }

 

 function moveAuto(){

        clearInterval(timerAuto);

        timerAuto = setInterval(function(){

 if(iNum!=aLi.length-1){

                iNum++;

                doMove(oUl,‘left‘,30,-iNum*w);

 }else{

                iNum = 0;

                clearInterval(timerAuto);

                doMove(oUl,‘left‘,150,-iNum*w,moveAuto);

 }

            changeColor(iNum);

 },1500);

 }

 

    moveAuto();

 

 for (var i=0; i<aSpan.length; i++) {

        aSpan[i].index = i;

        aSpan[i].onclick = function(){

            clearInterval(timerAuto);

 if(this.index == 0){

 if(iNum == aLi.length - 1){

                    iNum = 0;

 

                    doMove(oUl,‘left‘,150,-(w*iNum),moveAuto);

 }else{

                    iNum++;

                    doMove(oUl,‘left‘,40,-(w*iNum),moveAuto);

 } 

 }else{

 if(iNum == 0){

                    iNum = aLi.length - 1;

                    doMove(oUl,‘left‘,150,-(w*iNum),moveAuto);

 }else{

                    iNum--;

                    doMove(oUl,‘left‘,40,-(w*iNum),moveAuto);

 } 

 }

            changeColor(iNum);

 };

 }

 

 for (var i=0; i<aBtn.length; i++) {

        aBtn[i].index = i;

        aBtn[i].onmouseover = function(){

            changeColor(this.index);

            clearInterval(timerAuto);

            iNum = this.index;

            doMove(oUl,‘left‘,150,-(w*iNum));

 };

        aBtn[i].onmouseout = function(){

            moveAuto();

 };

 }

};

</script>

</head>

<body>

 <div id="wrap">

 <span id="left"><</span>

 <span id="right">></span>

 <ul id="list">

 <li><img src="img/1.jpg"></li>

 <li><img src="img/2.jpg"></li>

 <li><img src="img/3.jpg"></li>

 <li><img src="img/4.jpg"></li>

 <li><img src="img/5.jpg"></li>

 <li><img src="img/6.jpg"></li>

 </ul>

 <ul id="btns">

 <li class="active"></li>

 <li></li>

 <li></li>

 <li></li>

 <li></li>

 <li></li>

 </ul>

 </div>

</body>
时间: 2024-10-20 15:42:47

【原】运动版的轮播图,有左右按钮和单独分页的相关文章

JS原生带小白点轮播图

咱们刚刚说了js原生轮播图,现在给他加上可以随着一起走动的小圆点吧! css代码: *{ margin:0px; padding: 0px; } ul{ width: 2500px; height: 300px; position: absolute; } li{ float: left; list-style: none; } img{ width: 500px; height: 300px; } div{ width: 500px; height: 300px; margin: 50px a

带无缝滚动的轮播图(含JS运动框架)

今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下.不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧. js运动框架的代码如下: 1 //获取样式 2 function getStyle(obj,attr){ 3 if(obj.currentStyle){ 4 return obj.currentStyle[attr]; 5 }else{ 6 return getComputedStyle(obj,false)

移动端 触屏轮播图(完善版)

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=320,user-scalable=no" /> <title>ios 轮播图简版<

轮播图---左右切换无长滚动效果轮播图-中级难度版

左右切换无长滚动轮播图思路:首先设有全局变量position(确定当前图片是第几张),arr数组:存放图片地址,方向:direction, 及lis小圆点数组,prev,记录小圆点的前一个, moveBool是否进入运动函数等1.点击事件:点击左边的leftBn,设置direction="right",position--,在这要确定position不能超出数组长度范围, 超出要重新赋值,点击小圆点把小圆点的当前是lis数组中的第几个赋值给position,然后图片生成2.图片生成:图

84JS插件:jQuery版轮播图

一.代码分两个部分:1.HTML部分,根据注释处理即可:2.基于jQuery的play.js插件部分,这里为了展示效果,直接写在<html></html>下的<script></script>标签里.3.效果包含:自动轮播,焦点对齐,前进后退,直走不返,鼠标进入.轮播停止且前进后退图标出现,鼠标离开.轮播重启且前进后退图标隐藏.4.这里可以预览效果.二.轮播图原理说明:(1)轮播图(假设)有7张图片,“一”字排列,把第1张图片复制一次,放到第8张的位置,这样

js学习总结----轮播图之渐隐渐现版

具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin:0; padding:0; font-size:14px; -webkit-user-select:none; } ul,li{ list-style } im

移动版轮播图

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>新型轮播图</title> <link rel="stylesheet" href="index.css"> *{ margin:0px; padding: 0px; } .lunbo{ width: 1000

原生JS面向对象思想封装轮播图组件

原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能实现都分别分为不同的模块.目前我封装的这个版本还不适配移动端,只适配PC端. 主要的功能有:自动轮播,点击某一张图片对应的小圆点就跳转到指定图片,有前后切换按钮.使用的时候只需要传入图片的路径以及每张图片分别所对应的跳转路径还有目标盒子ID就可以了,还可以自定义每张图轮播的延时,不过延时参数不是必须

水平滚动轮播图

1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3 4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 5 <head> 6 <meta http-equiv="Content