轮播图

作者: loyehu | 来源:发表于2017-10-10 21:56 被阅读0次

简单的轮播图

first:通过DOM 获取到html中的元素
var oBanner = document.getElementById("banner");            //   图片的ul元素
var aImg = oBanner.getElementsByTagName("li");               //   放图片的li元素
var oSpots = document.getElementById("spots");                //   小圆点的ul元素 
var aSpot = oSpots.getElementsByTagName("li");               //   小圆点的li元素
var oLeftClick = document.getElementById("leftClick");      //  左侧点击切换元素
var oRightClick = document.getElementById("rightClick");   //  右侧点击切换元素
second:定义一个对象,配置需要改变的量
var odj = {
     "interval": 2000,           //  轮播时间间隔
     "animatetime": 600,     //  运动总时间
     "tween": "QuadEaseOut",       //  缓冲运动执行函数 (二次的)
     "width": 560,      //  图片宽度(根据轮播图片实际宽度进行设置)
}
third:将第一张图片复制,放在轮播图片后面(使图片切换到最后一张时,可以做到无缝切换)
 oBanner.appendChild( aImg[0].cloneNode(true) );     

【注】cloneNode 是DOM对象,系统默认提供的方法/函数,作用是复制克隆节点
cloneNode(deep) 参数deep,默认为false;设置为true,复制其节点和属性,及其后代;设置为false,只克隆其节点及后代(不克隆属性)。

fourth:小圆点的监听,点击圆点图片切换,圆点属性改变
var idx = 0;    //  设置信号量
for(var i = 0; i < aSpot.length; i++){
     aSpot[i].index = i;      //  存储i的值
     aSpot[i].onclick = function(){
          idx = this.index;     //  将存储的序号赋值给信号量(信号量就是自己的序号)
          animate(oBanner,{"left" : -obj.width * idx},obj.animatetime,obj.tween);
          changeSpot();   //  改变小圆点
     }
}

【注】aSpot[i].index = i; 因为点击事件是在for循环执行结束后执行的,所以需要保存每次执行的i的值,否则i为最大值( aSpot.length)。
【注】 animate(oBanner,{"left" : -obj.width * idx},obj.animatetime,obj.tween);调用封装的动画函数,参数oBanner:运动的物体;参数" left ":改变的属性;-obj.width * idx:图片向左移动所以为负值,obj.width的值为560(图片宽度)* idx(信号量)计算每次向左移动的值;obj.tween:变换的缓冲函数。

fifth:根据信号量设置小圆点(函数)
function changeSpot(){
    var n = idx > aSpot.length - 1 ? 0 : idx;      //  判断信号量的值,使它循环播放  
    for(var j = 0; j < aSpot.length; j++){    //  排它法
        aSpot[j].className = "";      //  先将所以点的class样式去除
    }
    aSpot[n].className = "currentSpot";    //  设置当前点的样式
}

【注】var n = idx > aSpot.length - 1 ? 0 : idx; 三目运算书写格式(当 idx > aSpot.length - 1的值为true时,执行0;当 idx > aSpot.length - 1的值为false时,执行idx)。

sixth:左右侧按钮点击实现图片切换
右侧按钮点击图片向左切换效果
//监听
oRightClick.onclick = rightBtnHandler;
function rightBtnHandler(){        //右按钮的事件处理函数
    if(oBanner.isanimated) return;       //函数截流     
      idx++;        //信号量的变化    
      changeSpot();         //改变小圆点
        //运动机构的移动
      animate(oBanner,{"left" : -obj.width * idx},obj.animatetime,obj.tween,function(){
        if(idx > length - 1){           // 回调函数
          idx = 0;
          m_unit.style.left = "0px";
        }
      });
}

【注】函数节流: 为了解决动画没有完成就执行下一次的问题; if 执行语句如果只有一条,可以不加大括号(例: if(oBanner.isanimated) return; )。

左侧按钮点击图片向右切换效果
leftBtn.onclick = function(){         //监听
    if(m_unit.isanimated) return;      //函数截流
        idx--;
        if(idx < 0){
            idx = length - 1;
            oBanner.style.left = -obj.width * aSpot.length + "px";   //  变为最后一张图片
        }
    changeSpot();          //改变小圆点
    animate(oBanner,{"left" : -obj.width * idx},obj.animatetime,obj.tween);
}
seventh:自动轮播效果、鼠标移动事件
var timer = setInterval(rightBtnHandler,obj.interval);       //  自动轮播
    oBox.onmouseover = function(){        //鼠标进入停止,离开继续
        clearInterval(timer);
    }
    oBox.onmouseout = function(){
        timer = setInterval(rightBtnHandler,obj.interval);
    }

相关文章

  • 无标题文章

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。它们各具特色,各有用处。 1.传统轮播图 第一步...

  • 轮播图

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。 1.传统轮播图 第一步,得到元素 第二步,设置...

  • 现金红包

    每日红包 轮播图 详情图 周末红包 轮播图 详情图 圣诞红包 轮播图 详情图

  • day7_作业

    轮播图1 轮播图2

  • [iOS]定制性强的广告轮播图--SCAdView

    @[无限轮播图] @[3D轮播图] @[广告轮播图] SCAdView Statement If my code ...

  • 普通奖品

    卡西欧小方块 轮播图 详情图 三只松鼠大礼包 轮播图 详情图 天猫精灵 轮播图 详情图 小米蓝牙无线耳机 轮播图 ...

  • 轮播图心得

    轮播图 写轮播图之前我们要认识到几个问题:一、什么是轮播图?二、怎么实现轮播效果?三、轮播图还有什么小功能可以实现...

  • 第五周学习内容

    焦点图轮播特效之原理、焦点图轮播样式之布局、焦点图轮播之箭头切换、焦点图轮播之无限滚动。 js简介、用法、输出。

  • 三种样式的轮播图

    一、100%比例轮播图 HTML代码 CSS样式 js代码 二、手动箭头轮播图 三、简易轮播图

  • 多轮播图的设计

    列表展示多个轮播图 多个轮播图同时显示 多个轮播图不定时进行轮播动画 对应呈现的关系:1个TableView、一个...

网友评论

      本文标题:轮播图

      本文链接:https://www.haomeiwen.com/subject/wjsbyxtx.html