javascript基础知识之html5轮播图实例讲解(44)

本文实例为大家分享了html5轮播图的具体代码,供大家参考,具体内容如下

1.轮播图的布局:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css"> 

      /*去除默认样式*/
      *{
        margin: 0;
        padding: 0;
      } 

      /*设置div*/
      #outer{
        width: 520px;
        height: 333px;
        /*设置居中*/
        margin: 50px auto;
        /*
         * 设置背景颜色
         */
        background-color: greenyellow;
        /*设置上下内边距*/
        padding: 10px 0;
        /*为父元素开启相对定位*/
        position: relative;
        /*隐藏溢出的内容*/
        overflow: hidden;
      } 

      /*设置ul*/
      #imgList{
        /*去除项目符号*/
        list-style: none;
        /*设置ul的宽度*/
        width: 2600px;
        /*开启绝对定位*/
        position: absolute; 

        /*
         * 通过修改ul的left值,可以切换图片
         * 1 0px
         * 2 -520px
         * 3 -1040px
         * 4 -1560px
         * ....
         */
        left: 0px;
      } 

      /*设置li*/
      li{
        /*设置元素浮动*/
        float: left;
        /*设置外边距*/
        margin: 0 10px;
      } 

      /*设置导航按钮*/
      #nav{
        /*开启绝对定位*/
        position: absolute;
        /*定位*/
        bottom: 20px; 

        /*
         * #outer 宽度 520px
         *
         * #nav 宽度 125px
         *
         * 520 - 125 = 395/2 = 197.5
         */
        left: 197px; 

      } 

      #nav a{
        /*设置a浮动*/
        float: left;
        /*设置宽和高*/
        width: 15px;
        height: 15px; 

        /*设置背景颜色*/
        background-color: red; 

        /*设置外边距*/
        margin: 0 5px; 

        /*设置透明*/
        opacity: 0.5;
        filter: alpha(opacity=50);
      } 

    </style>
  </head>
  <body> 

    <!--
      创建一个div作为容器
    -->
    <div id="outer"> 

      <!--创建一个ul,用来保存图片-->
      <ul id="imgList">
        <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>
      </ul> 

      <!--创建一个div来放导航按钮-->
      <div id="nav">
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
      </div> 

    </div> 

  </body>
</html>

2.轮播图的逻辑:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css"> 

      /*去除默认样式*/
      *{
        margin: 0;
        padding: 0;
      } 

      /*设置div*/
      #outer{
        width: 520px;
        height: 333px;
        /*设置居中*/
        margin: 50px auto;
        /*
         * 设置背景颜色
         */
        background-color: greenyellow;
        /*设置上下内边距*/
        padding: 10px 0;
        /*为父元素开启相对定位*/
        position: relative;
        /*隐藏溢出的内容*/
        overflow: hidden;
      } 

      /*设置ul*/
      #imgList{
        /*去除项目符号*/
        list-style: none;
        /*设置ul的宽度*/
        width: 2600px;
        /*开启绝对定位*/
        position: absolute; 

        /*
         * 通过修改ul的left值,可以切换图片
         * 1 0px
         * 2 -520px
         * 3 -1040px
         * 4 -1560px
         * ....
         */
        left: 0px;
      } 

      /*设置li*/
      li{
        /*设置元素浮动*/
        float: left;
        /*设置外边距*/
        margin: 0 10px;
      } 

      /*设置导航按钮*/
      #nav{
        /*开启绝对定位*/
        position: absolute;
        /*定位*/
        bottom: 20px; 

        /*
         * #outer 宽度 520px
         *
         * #nav 宽度 125px
         *
         * 520 - 125 = 395/2 = 197.5
         */
        left: 197px;
      } 

      #nav a{
        /*设置a浮动*/
        float: left;
        /*设置宽和高*/
        width: 15px;
        height: 15px; 

        /*设置背景颜色*/
        background-color: red; 

        /*设置外边距*/
        margin: 0 5px; 

        /*设置透明*/
        opacity: 0.5;
        filter: alpha(opacity=50);
      } 

      #nav a:hover{
        background-color: black;
      } 

    </style> 

    <script type="text/javascript" src="js/tools.js"></script> 

    <script type="text/javascript"> 

      window.onload = function(){ 

        //获取id为imgList的ul
        var imgList = document.getElementById("imgList");
        //获取所有的图片标签
        var imgs = document.getElementsByTagName("img");
        //设置ul的宽度
        imgList.style.width = 520 * imgs.length + "px";  

        //设置导航按钮居中
        //获取id为outer的div
        var outer = document.getElementById("outer");
        //获取id为nav的div
        var nav = document.getElementById("nav"); 

        nav.style.left = (outer.offsetWidth - nav.offsetWidth)/2 + "px"; 

        //创建一个变量,来保存当前显示图片的索引
        var index = 0; 

        //获取所有的超链接
        var links = document.getElementsByTagName("a"); 

        //设置对应的超链接变成选中状态
        links[index].style.backgroundColor = "black"; 

        //开启自动切换图片
        autoChange(); 

        /*
         * 点击超链接切换到对应的图片
         * 点击第一个超链接,切换到第一个图片
         * 点击第二个超链接,切换到第二个图片
         */ 

        //为所有的超链接绑定单击响应函数
        for(var i=0 ; i<links.length ; i++){ 

          //在超链接中添加一个属性
          links[i].num = i; 

          links[i].onclick = function(){ 

            //当切换图片时,为了不受自动切换的影响需要将其关闭
            clearInterval(autoTimer); 

            //获取到当前点击的超链接的索引
            //更新当前图片的索引
            index = this.num; 

            //切换到对应的图片
            /*
             * 切换图片,就是修改imgList的left属性值
             * 0 0*-520
             * 1 1*-520
             * 4 4*-520
             */
            //imgList.style.left = -520*index + "px";
            //设置过渡效果
            move(imgList , "left" , -520*index , 20 , function(){
              //图片切换完毕,打开自动切换
              autoChange();
            }); 

            setA();
          };
        } 

        //定义一个变量,保存自动切换图片的定时器
        var autoTimer;  

        /*
         * 定义一个函数,专门用来自动切换图片
         */
        function autoChange(){ 

          //开启一个定时器,来负责图片的切换
          autoTimer = setInterval(function(){ 

            //索引自增
            index++; 

            //判断index值是否合法
            index = index % imgs.length; 

            //切换图片
            move(imgList , "left" , -520*index , 20 , function(){
              //动画执行完毕,切换导航点
              setA();
            }); 

          },3000); 

        } 

        /*
         * 函数专门用来设置超链接的选中状态的
         */
        function setA(){ 

          /*
           * 因为最后一张图片和第一张是一样的,所以当显示的图片是最后一张时,应该是第一个的超链接变颜色
           */
          if(index >= imgs.length - 1){
            index = 0; 

            //已经切换到最后一张,瞬间将其切换到第一张
            imgList.style.left = 0; 

          } 

          /*遍历超链接*/
          for(var i=0 ; i<links.length ; i++){
            //将所有的超链接的背景颜色都设置为红色
            links[i].style.backgroundColor = "";
          } 

          //将当前选中的超链接设置为黑色
          links[index].style.backgroundColor = "black"; 

        } 

      }; 

    </script> 

  </head>
  <body> 

    <!--
      创建一个div作为容器
    -->
    <div id="outer"> 

      <!--创建一个ul,用来保存图片-->
      <ul id="imgList">
        <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/1.jpg" /></li>
      </ul> 

      <!--创建一个div来放导航按钮-->
      <div id="nav">
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
        <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a>
      </div> 

    </div> 

  </body>
</html>

外部js代码:

/*
 * 定义一个move()函数来执行一些简单的动画效果
 * 参数:
 * obj 要执行动画的对象
 * attr 执行动画时要修改的属性
 * target 执行动画的目标位置
 * speed 动画执行的速度
 * callback 回调函数,当动画执行完毕以后,该回调函数会执行
 */
function move(obj, attr, target, speed, callback) {
  //关闭之前的定时器
  /*
   * 一般都会将定时器的标识作为执行动画对象的属性保存,这样可以确保只有当前对象能访问到定时器
   */
  clearInterval(obj.timer); 

  //判断向左移还是向右移
  //0 --> 800 向右移
  //起始位置 < 目标位置 则向右移动,速度为正
  //800 --> 0 向左移
  //起始位置 > 目标位置 则向左移动,速度为负 

  //获取元素的起始位置
  var current = parseInt(getStyle(obj, attr)); 

  if(current > target) {
    //起始位置 > 目标位置 则向左移动,速度为负
    speed = -speed;
  } 

  //开启一个定时器,控制box1移动
  obj.timer = setInterval(function() { 

    //获取box1的当前的left值
    var oldValue = parseInt(getStyle(obj, attr)); 

    //通过旧值来计算新值
    var newValue = oldValue + speed; 

    //判断newValue是否大于800
    /*
     * 如果从0 向 800,执行动画,则值越来越大
     * 如果从800向0执行动画,则值越来小
     */
    if((speed > 0 && newValue > target) || (speed < 0 && newValue < target)) {
      newValue = target;
    } 

    //将box1的left值修改为新值
    obj.style[attr] = newValue + "px"; 

    //当box1移动到800px的位置时,停止移动
    if(newValue == target) { 

      clearInterval(obj.timer); 

      //调用回调函数
      callback && callback();
    } 

  }, 30); 

} 

/*
 * 用来获取任意元素的当前样式
 * 参数:
 *   obj 要获取样式的元素
 *   name 要获取的样式的名字
 *
 * 在读取元素的样式时,如果元素没有设置样式,
 * 则火狐、Chrome等浏览器会自动计算元素的样式值
 * 而IE浏览器,有时用不会自动计算,而是返回默认值,比如宽度会返回auto
 *
 */
function getStyle(obj, name) { 

  //判断浏览器中是否含有getComputedStyle这个方法
  if(window.getComputedStyle) {
    //支持正常的浏览器
    return getComputedStyle(obj, null)[name];
  } else {
    //只支持IE
    return obj.currentStyle[name];
  } 

} 

/*
 * 定义一个专门用来向元素中添加class的函数
 * 参数:
 *   obj 要添加class属性的对象
 *   cn 要添加的class的属性值
 */
function addClass(obj, cn) { 

  //如果元素中有该class则不添加,没有才添加
  if(!hasClass(obj, cn)) {
    obj.className += " " + cn;
  } 

} 

/*
 * 创建一个函数检查一个元素中是否含有指定的class
 * 如果有,则返回true。否则返回false
 */
function hasClass(obj, cn) { 

  //创建正则表达式
  var reg = new RegExp("\\b" + cn + "\\b"); 

  //返回检查结果
  return reg.test(obj.className);
} 

/*
 * 用来从指定元素中删除class值的方法
 */
function removeClass(obj, cn) { 

  //要删除一个class,就是将这个class替换为一个空串
  //创建正则表达式
  var reg = new RegExp("\\b" + cn + "\\b", "g"); 

  //判断obj中是否含有这个class 

  if(reg.test(obj.className)) {
    //将内容替换为空串
    obj.className = obj.className.replace(reg, "");
  }
} 

/*
 * 用来切换元素的class的方法
 * 如果元素中含有该class,则删除
 * 如果元素中没有该class,则添加
 *
 */
function toggleClass(obj, cn) {
  //检查obj中是否含有cn
  if(hasClass(obj, cn)) {
    //有该class,则删除
    removeClass(obj, cn);
  } else {
    //没有该class,则添加
    addClass(obj, cn);
  } 

}

注:图片自己找

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 利用AngularJs实现京东首页轮播图效果

    先来看看效果图 其实写一个轮播图还是蛮简单的,我想了两种种方法,来实现轮播图(实际上细分是5种,但是其中两种是操作dom原生,三种是利用AngularJs的动画,所有归为两大类),等我写出来,大家好好理解一下就好. 那我先写一种,第一种是不使用angularjs的动画模块,只使用指令来完成动画的切换.在这里面就是在指令里操作dom元素,超级easy. 示例代码 <!DOCTYPE html> <html lang="en" ng-app="lunbo&quo

  • js改变透明度实现轮播图的算法

    前面有分享过改变层级的轮播图算法,今天继续利用透明度来实现无位移的轮播图算法. 实现逻辑:将所有要轮播的图片全部定位到一起,即一层一层摞起来,并且利用层级的属性调整正确的图片顺序,将图片的透明度全部设置为0,然后在让初始的第一张图片的透明度为1即可,具体算法如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>改变透明度算法(经典)</title&

  • 原生js实现移动开发轮播图、相册滑动特效

    使用方法: 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css" href="css/photoSlider.min.css" /> <script src="js/photoSlider.min.js" type="text/javascript" charset="utf-8"></script

  • zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题

    在移动web开发中,由于手机界面较小,为了能展示更多的图片经常使用轮播图并且还需要考虑到手机流量的问题,通过请教他人以及百度,个人感觉swipe.js比较好用. 它是一个纯javascript工具,不需要跟其它js库一起导入,同时兼容jQuery和zepto,压缩版的大小只有6kb很适合移动端的开发,它的git地址:https://github.com/thebird/swipe 在git上对其的使用方式介绍的相当清楚,关键代码如下 <div id='slider' class='swipe'>

  • js 基础篇必看(点击事件轮播图的简单实现)

    轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首先,我们可以在body中添加一个div并且将宽度设置成百分比(自适应页面),比例具体是相对谁的百分比的话按需求来做,在这里不多说.将图片放入到div 中. 其次,样式部分将img标签全部设置成absolute:以方便定位 最后,js部分说说逻辑,定义两个空数组,第一个数组用来保存初始的显示在页面的图

  • JS实现左右无缝轮播图代码

    废话不多说了,直接给大家贴代码了. 无缝轮播图: <title>无缝轮播图</title> <style> *{margin: 0;padding:0; } ul{list-style: none;} .banner{width: 600px;height: 300px;border: 2px solid #ccc;margin: 100px auto;position: relative;overflow: hidden;} .img{position: absolu

  • js实现点击左右按钮轮播图片效果实例

    本文实例讲述了js实现点击左右按钮轮播图片效果的方法.分享给大家供大家参考.具体实现方法如下: $(function () { var index = 1; var pPage = 1; var $v_citemss = $(".citemss"); var $v_show = $v_citemss.find("ul"); v_width = $v_citemss.width();//图片展示区外围div的大小 //注:若为整数,前边不能再加var,否则会被提示un

  • 简单的JS轮播图代码

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用面向过程函数式编程去实现,相对于面向对象设计模式,代码难免会显得臃肿冗余.但没有面向对象的抽象却很适合新手理解与学习.已经在BAT的同学看到希望少喷点.另外可以多提意见. 轮播图的原理: 一系列的大小相等的图片平铺,利用CSS布局只显示一张图片,其余隐藏.通过计算偏移量利用定时器实现自动播放,或通过

  • 完美实现八种js焦点轮播图(上篇)

    本文分为上下篇为大家分享了js焦点轮播图八种经典效果,供大家参考,具体内容如下 基本布局: <div id="box"> <ul id="ul"> <li style='display:block;'><img src="images/1.jpg" alt=""></li> <li><img src="images/2.jpg"

  • js实现支持手机滑动切换的轮播图片效果实例

    本文实例讲述了js实现支持手机滑动切换的轮播图片效果的方法.分享给大家供大家参考.具体如下: 运行效果如下: 完整实例代码点击此处本站下载. 使用方法案例: <script type="text/javascript" src="../src/zepto.js"></script> <script type="text/javascript" src="../src/carousel-image.js&qu

随机推荐