花了一上午来调整页面在ie10上的显示问题,sass编译生成的css文件在ie内核下一直不能正确加载,果然兼容性的问题还需要好好研究。转入正题,用css3实现轮播效果主要是基于css3的framework动画效果实现轮播效果以及之前提到的input:checked伪类来实现轮播的控制。在轮播的控制上不可避免的使用了js,一直想写出优雅的js代码,在看了自己写的代码之后发现自己还有很大的提升空间,也许该找个机会去阅读优秀框架的源代码了。

  当然也借鉴了网上很多资料,有问题的是在ie下完全没有效果,对轮播导航的实现也比较死板,能够改进的地方很多。假设我们的轮播图有三张。将ul.carousel-wrap的宽度设置为300%,也就是3倍的div.carousel的宽度 overflow:hidden 而ul的子li 元素设置宽度为正好div.carousel的宽度 并且设置左浮动保证li的正常显示。这时候我们只要为ul设置keyframes来设置margin-left 给一个负值就能实现轮播的动画效果了。至于导航栏的控制,用input:checked来控制动画的切换,用:active伪类来模拟动画的重新启动。设定一个定时器setinterval来实现轮播导航随着轮播移动。并且维持一个labelSelect的哨兵值来控制记录当前轮播图的位置信息。当label被点击的时候,改变labelSelect的值并且重启定时器来消除时间差。

<div class="carousel">                                       
  <input type="radio" name="slide" checked id="l01">    
  <input type="radio" name="slide" id="l02">
  <input type="radio" name="slide" id="l03">
  <ul class="carousel-wrap">
    <li class="carousel-item"></li>
    <li class="carousel-item"></li>
    <li class="carousel-item"></li>
  </ul>
  <div class="label-wrap" id="label-group">
    <label for="l01" id="label1"></label>
    <label for="l02" id="label2"></label>
    <label for="l03" id="label3"></label>
  </div>
</div>

js代码却是需要改进的地方还有很多,感觉自己的能力离es6还有很大的距离,希望一个月之后能写出比写在高效,优雅的多的js代码。部分js代码如下(大致描述了基本思路):

//轮播导航条随轮播变化变化
var label1 = document.getElementById('label1');
label1.style.backgroundColor = '#c70025';
var label2 = document.getElementById('label2');
var label3 = document.getElementById('label3');
//当前轮播位置
var labelSelect = 1;
if(!!label1.addEventListener){
  label1.addEventListener("click",function(){
    var input1 = document.getElementById('l01');
    if(input1.checked === true){
      input1.checked = false;
     }
    labelSelect = 1;
    //重启定时器消除时间差
    clearInterval(timer);
    timer = setInterval("labelMove()",3000);
    var parent = this.parentNode;
    var sibling = parent.getElementsByTagName('label');
    for(var i = 0 ; i < sibling.length ; i++){
      sibling[i].style.backgroundColor = '#ffffff';
    }
    this.style.backgroundColor = '#c70025';
  });
}else if(!!label1.attachEvent){
  ...
}

var timer = null;
timer = setInterval("labelMove()",3000);

var labelMove = function(){
  var labelGroup = document.getElementById('label-group');
  var labels = labelGroup.getElementsByTagName('label');
  labelSelect = Math.ceil((labelSelect + 1)%3.1);
  for(var i = 0 ; i < labels.length ; i++){
    labels[i].style.backgroundColor = '#ffffff';
  }
  labels[labelSelect - 1].style.backgroundColor = '#c70025';
};

基于css3的轮播效果的更多相关文章

  1. CSS3图片轮播效果

    原文:CSS3图片轮播效果 在网页中用到图片轮播效果,单纯的隐藏.显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间.css3的出现,让动画变得不再是问题,而且 ...

  2. css3爆炸轮播效果

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="UTF-8&qu ...

  3. CSS3实现轮播图效果

    CSS3实现轮播图主要是由css:background-position和css3:animation实现.且实现此轮播需要一张四个图横着相连的图片. 注(Internet Explorer 10.F ...

  4. css3关键帧动画实现轮播效果

    实现效果:打开手机京东,可以看到首页的头部,以这个头部为基础,仿写一个类似的样式. 思路:仔细观察可以发现,手机京东的头部是以一个搜索栏和轮播特效组成的,而这个搜索栏是以轮播特效做为背景的,现在运用c ...

  5. css3动画使用技巧之—JQ配合css3实现轮播之animation-delay应用

    <!DOCTYPE html> <html> <head> <title>css3动画使用技巧之—JQ配合css3实现轮播之animation-dela ...

  6. 基于css制作轮播图的部分效果

    在轮播图中,我们可以通过鼠标在特定位置上的滑动来实现元素背景的改变.通常在制作轮播图时,我们首先想到的是js中的交互.可是,如果我们无法使用js,只能单纯的靠css又该如何实现这一效果呢?下面,本人将 ...

  7. 针对淡入淡出的定时轮播效果js

    如果不使用jquery的fadeIn和fadeOut的接口和不适用animate情况下,如果要做用js实现淡入淡出轮播效果,我所想到的办法就是使用css3新特性transition(注意好兼容性). ...

  8. 纯CSS3实现轮播图

    前言 纯css3实现的轮播图效果,和JavaScript控制的相比,简单高效了很多,但是功能也更加单一,只有轮播不能手动切换. 用什么实现的呢?页面布局 + animation动画 HTML部分 &l ...

  9. iOS 封装跑马灯和轮播效果

    代码地址如下:http://www.demodashi.com/demo/14075.html 功能概述和预览 功能描述:WSL_RollView 是基于UICollectionView实现的支持水平 ...

随机推荐

  1. 在linux上部署web环境

    1.升级python到2.7版本(通过源码包重新安装一个2.7版本的python):wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9. ...

  2. JavaScript中的splice方法

    splice方法根据传入的不同参数可分别实现删除和插入操作 使用splice(pra1,pra2,pra3)方法,需要为其提供如下参数: 1.pra1为其起始索引(即希望开始添加元素的地方) 2.pr ...

  3. Unity3D 中的定时器

    不算上 C# 自带的,目前知道两种,以下分别介绍. 1.每帧检查 定义一个时间变量 timer,每帧将此时间减去帧间隔时间 Time.deltaTime,如果小于或者等于零,说明定时器到了,执行相应功 ...

  4. 安装MySQL(简便)

    1.在本地虚拟机上上传mysql的5个安装包 2.查看opt目录下是否有这5个安装包 yum install /var/opt/mysql-community-* -y //安装MySQL syste ...

  5. java String

    实例一.substring(int beginIndex,int endIndex) String end ="2007-12-31";System.out.println(end ...

  6. F2工作流引擎参与者类型成员的交、并、互拆计算规则

          计算描述:计算规则指的是和其它“参与者类型成员”的之间的计算,必须求解处理人不为空的情况下才进行规则计算,各个“参与者类型成员”按序号顺序执行. 计算算法:并集(权重最低),交集(权重中) ...

  7. Java,Android 项目导入Eclipse常见错误

    一.导入的jar包不存在: 右键工程属性查看: 导入的第三方jar包不存在: 解决方法: 删除该jar包,得到该jar包并存至本地,再导入该jar包 二.中文字符乱码: 解决方法: 右键项目属性: 修 ...

  8. blade and soul Group Combos

    Group Combos A martial artist always make friends along their way. They learn how to work and fight ...

  9. Linux版Matlab R2015b的bug——脚本运行的陷阱(未解决)

    0 系统+软件版本 系统:CentOS 6.7 x64, 内核 2.6.32-573.el6.x86_64软件:Matlab R2015b(包括威锋网和东北大学ipv6下载的资源,都测试过) 1 脚本 ...

  10. [css]水平垂直居中的方法

    1.top:cale(50% - 2rem); left:cale(50% - 2rem);