JavaScript焦点轮播图
在慕课学习了JavaScript焦点轮播图特效,在此做一个整理。
首先是html结构,我用的是本地同文件夹下的三张图片,多出来的第一张(pic3副本)和最后一张图片(pic1副本)是为了实现无缝切换效果。通过设置div容器的left值来实现图片切换时,当轮播到pic3需要切换到pic1时,最后一张图片(也就是pic1副本)被切换进来,此时left值已经为-1600px,并且同时我们又将其left值改为-400px,这样就回到了真正的第一张图pic1。:
<div id="container">
<div id="pic" style="left:-400px">
<div><a href="javascript:;"><img src="DSC02637.jpg" alt="pic3copy"></a></div>
<div><a href="javascript:;"><img src="DSC01627.jpg" alt="pic1"></a></div>
<div><a href="javascript:;"><img src="DSC01628.jpg" alt="pic2"></a></div>
<div><a href="javascript:;"><img src="DSC02637.jpg" alt="pic3"></a></div>
<div><a href="javascript:;"><img src="DSC01627.jpg" alt="pic1copy"></a></div>
</div>
<ul id="position">
<li class="cur"></li>
<li class=""></li>
<li class=""></li>
</ul>
<a href="javascript:;" id="prev" class="arrow"><</a>
<a href="javascript:;" id="next" class="arrow">></a> </div>
css样式
*{
             margin:;
             padding:;
             text-decoration: none;
         }
        #container{
            position: relative;
            width: 400px;
            height: 200px;
            overflow: hidden;/*隐藏溢出的图片*/
        }
        #pic{
            width:2000px;/*5张图的宽度*/
            position: absolute;/*基于父容器进行定位*/
        }
        #pic div{
            float: left;
            background: #5dd94e;
        }
        #pic div img{
            width: 400px;
            height: 200px;
        }
        #position{
            position: absolute;
            bottom:;
            right:;
            margin:;
            background: #000;
            opacity: 0.4;
            width: 400px;
            text-align: center;
        }
        #position li{
            width: 10px;
            height: 10px;
            margin:0 2px;
            display: inline-block;
            -webkit-border-radius: 5px;
            border-radius: 5px;
            background-color: #afafaf;
        }
        #position .cur{
            background-color: #ff0000;
        }
         .arrow {
             cursor: pointer;
              display: none;
              line-height: 39px;
              text-align: center;
              font-size: 36px;
              font-weight: bold;
              width: 40px;
              height: 40px;
              position: absolute;
              z-index:;
              top: 80px;
              background-color: RGBA(0,0,0,.3);
              color: #fff;
          }
        .arrow:hover {
            background-color: RGBA(0,0,0,.7);
        }
        #container:hover .arrow {
            display: block;
        }
        #prev {
            left: 20px;
        }
        #next {
            right: 20px;
        }
JavaScript
window.onload=function(){
            var container=document.getElementById("container");
            var pic=document.getElementById("pic");
            var btns=document.getElementById("position").getElementsByTagName("li");
            var prev=document.getElementById("prev");
            var next=document.getElementById("next");
            var flag=false;
            var index=0;//小圆点索引
            for (var i = 0; i < btns.length; i++) {
                btns[i].index=i;
            }
            //控制小圆点显示
            function showBtn(index){
                for (var i = 0; i < btns.length; i++) {
                    if(btns[i].className=='cur'){
                        btns[i].className='';
                        break;
                    }
                }
                btns[index].className="cur";
            }
            //向右滑动index+1,index>2,即从最后一张切换到第一张时,index置为0
            //flag为true标识正在切换
            next.onclick=function(){
                if(flag){
                    return;
                }
                index++;
                index = index > 2 ? 0 : index;
                showBtn(index);
                if(!flag){
                    animate(-400);
                }
            }
            prev.onclick=function(){
                if(flag){
                    return;
                }
                index--;
                index = index < 0 ? 2 : index;
                showBtn(index);
                if(!flag){
                    animate(400);
                }
            }
            function animate(offset){
                flag=true;
                var newLeft=parseInt(pic.style.left) + offset ;
                var time=300;//位移总时间
                var interval=10;//位移间隔时间
                var speed=offset/(time/interval);//每次位移量
                //平滑移动
                function go(){
                    if ( (speed > 0 && parseInt(pic.style.left) < newLeft) || (speed < 0 && parseInt(pic.style.left) > newLeft)) {
                        pic.style.left = parseInt(pic.style.left) + speed + 'px';
                        setTimeout(go, interval);
                    }
                    else{
                        flag=false;
                        pic.style.left = newLeft+ "px";
                        if(newLeft > -400 ){
                            pic.style.left = -1200 + "px";
                        }
                        if(newLeft < -1200 ){
                            pic.style.left = -400 + "px";
                        }
                    }
                }
                go();
            }
            //小圆点点击事件
            for (var i = 0; i < btns.length; i++) {
                btns[i].onclick=function (){
                    if (flag) {
                        return;
                    }
                    //点击当前轮播图片则不继续执行
                    if(this.className=="cur"){
                        return;
                    }
                    var myIndex=this.index-index;
                    var offset=-400*myIndex;
                    index=this.index;
                    showBtn(index);
                    animate(offset);
                }
            }
            //自动播放
            function play() {
                timer = setTimeout(function () {
                    next.onclick();
                    play();
                }, 2000);
            }
            function stop() {
                clearTimeout(timer);
            }
             container.onmouseover = stop;
            container.onmouseout = play;
            play();
        }
JavaScript焦点轮播图的更多相关文章
- 原生javascript焦点轮播图
		刚刚学会,写了一个轮播图效果,不过bug蛮多,请高手指点一下,谢谢 <!DOCTYPE html> <html> <head> <meta charset=& ... 
- 原生js焦点轮播图
		原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ... 
- js焦点轮播图
		汇集网上焦点轮播图的实现方式,自己试了下,不过鼠标悬浮停止动画和鼠标离开动画播放好像没生效,不太明白,最后两行代码中,为什么可以直接写stop和play.不用加括号调用函数么?求懂的大神指点! 所用知 ... 
- HTML+CSS+Javascript实现轮播图效果
		HTML+CSS+Javascript实现轮播图效果 注意:根据自己图片大小来更改轮播图大小. <!doctype html> <html> <head> < ... 
- JS---案例---左右焦点轮播图(tb)
		案例---左右焦点轮播图(tb) <!DOCTYPE html> <html lang="en"> <head> <meta charse ... 
- 封装一个简单的原生js焦点轮播图插件
		轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ... 
- 原生js焦点轮播图的实现
		继续学习打卡,武汉加油,逆战必胜!今日咱们主要探讨一下原生js写轮播图的问题, 简单解析一下思路: 1,首先写好css样式问题 2,考虑全局变量:自动播放的定时器,以及记录图片位置的角标Index 2 ... 
- jquery手写焦点轮播图-------解决最后一张无缝跳转第一张的问题
		<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- JavaScript实现轮播图效果
		我又来了,同志们.老想你们了 捕获小可爱一枚. 下面进入正题:用JavaScript原生代码写轮播图效果. 具体效果就不多说了,网站上面的轮播效果我们都知晓.下面是展示代码 html代码: <d ... 
随机推荐
- square开源vim,tmux配置在linux上使用
			首先安装需要的软件 apt-get install vim ack-grep git tmux gnome-terminal ctags xclip silversearcher-ag 这里tmux需 ... 
- Part 2: Oracle E-Business Suite on Cloud FAQ
			Running Oracle E-Business Suite on Oracle Cloud is simple, but it doesn't take too much effort to co ... 
- Devexpress treelist 树形控件 实现带三种状态的CheckBox
			树形控件是使用频率很高的一种控件.对于属性控件往往需要下面两个功能 1.TreeList带有CheckBox,并且节点要有三种状态(所有的子节点都选中,所有的子节点都没选择,一部分子节点选中).使用 ... 
- 让我们一起Go(十三)
			前言: 上篇,我们了解了Go语言接口的一些知识,在这篇中,我们将继续聊聊接口这东西. Go语言空接口 Go语言中定义一个空接口,也就是没有任何函数需要实现的接口就是一个空接口,作为一个空接口,因为对象 ... 
- 欲善其事必先利其器---Xcode插件
			Xcode所有的插件都安装在目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ Alcatraz (用于管理xcode插件 ... 
- call方法和new对象的关系
			call只能改变this的指向,而使用new对象不仅会自动调用call方法改变这个对象的this指向,而且还会继承构造函数的原型. var fn = function(a){ this.a = a; ... 
- 【深入浅出.Net IL】1.一个For循环引发的IL
			.Net底层剖析目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 1.准 ... 
- 20套新鲜出炉的免费 PSD 格式的图标《免费下载》
			在网页设计中,设计师专注于每一个领域的设计,包括颜色选择.图标.创造力.混色等.正确的选择图标可以使他们的设计脱颖而出,看起来令人震惊.在 Web 设计领域,图标发挥非常重要的作用,因为美丽的和创造性 ... 
- iOS-UIButton-设置button标题和图片位置
			一.效果图 1.Button被点击之前 2.Button被点击之后 二.代码 - (void)createBtn3 { UIImage * buttonImage = [UIImage imageNa ... 
- [linux]scp指令
			实例1:从远处复制文件到本地目录 $scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft ... 
