原生js实现图片轮播特效


Posted in Javascript onDecember 18, 2015

本文特意为原生js实现图片轮播特效代码做了下总结,分享给大家供大家参考,欢迎大家学习。

运行效果图:

原生js实现图片轮播特效

具体代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>最简单的轮播广告</title>
  <style>
    body, div, ul, li {
      margin: 0;
      padding: 0;
    }

    ul {
      list-style-type: none;
    }

    body {
      background: #000;
      text-align: center;
      font: 12px/20px Arial;
    }

    #box {
      position: relative;
      width: 492px;
      height: 172px;
      background: #fff;
      border-radius: 5px;
      border: 8px solid #fff;
      margin: 10px auto;
    }

    #box .list {
      position: relative;
      width: 490px;
      height: 170px;
      overflow: hidden;
      border: 1px solid #ccc;
    }

    #box .list li {
      position: absolute;
      top: 0;
      left: 0;
      width: 490px;
      height: 170px;
      opacity: 0;
      transition: opacity 0.5s linear
    }

    #box .list li.current {
      opacity: 1;
    }

    #box .count {
      position: absolute;
      right: 0;
      bottom: 5px;
    }

    #box .count li {
      color: #fff;
      float: left;
      width: 20px;
      height: 20px;
      cursor: pointer;
      margin-right: 5px;
      overflow: hidden;
      background: #F90;
      opacity: 0.7;
      border-radius: 20px;
    }

    #box .count li.current {
      color: #fff;
      opacity: 0.7;
      font-weight: 700;
      background: #f60
    }
  </style>
</head>
<body>
<div id="box">
  <ul class="list">
    <li class="current" style="opacity: 1;"><img src="img/images04/01.jpg" width="490" height="170"></li>
    <li style="opacity: 0;"><img src="img/images04/02.jpg" width="490" height="170"></li>
    <li style="opacity: 0;"><img src="img/images04/03.jpg" width="490" height="170"></li>
    <li style="opacity: 0;"><img src="img/images04/04.jpg" width="490" height="170"></li>
    <li style="opacity: 0;"><img src="img/images04/05.jpg" width="490" height="170"></li>
  </ul>
  <ul class="count">
    <li class="current">1</li>
    <li class="">2</li>
    <li class="">3</li>
    <li class="">4</li>
    <li class="">5</li>
  </ul>
</div>


<script>
  var box=document.getElementById('box');
  var uls=document.getElementsByTagName('ul');
  var imgs=uls[0].getElementsByTagName('li');
  var btn=uls[1].getElementsByTagName('li');
  var i=index=0; //中间量,统一声明;
  var play=null;
  console.log(box,uls,imgs,btn);//获取正确

  //图片切换, 淡入淡出效果我是用(transition: opacity 0.8s linear)做的,不纠结、简单 在css里面
  function show(a){        //方法定义的是当传入一个下标时,按钮和图片做出对的反应
    for(i=0;i<btn.length;i++ ){
      btn[i].className='';    //很容易看懂吧?每个按钮都先设置成看不见,然后把当前按钮设置成可见。
      btn[a].className='current';
    }
    for(i=0;i<imgs.length;i++){ //把图片的效果设置和按钮相同
      imgs[i].style.opacity=0;
      imgs[a].style.opacity=1;
    }
  }
  //切换按钮功能,响应对应图片
  for(i=0;i<btn.length;i++){
    btn[i].index=i;  //不知道你有没有发现,循环里的方法去调用循环里的变量体i,会出现调到的不是i的变动值的问题。所以我先在循环外保存住
    btn[i].onmouseover=function(){
      show(this.index);
      clearInterval(play); //这就是最后那句话追加的功能
    }
  }

  //自动轮播方法
function autoPlay(){
      play=setInterval(function(){ //这个paly是为了保存定时器的,变量必须在全局声明 不然其他方法调不到 或者你可以调用auto.play 也许可以但是没时间试了
      index++;
      index>=imgs.length&&(index=0);//可能有优先级问题,所以用了括号,没时间测试了。
      show(index);
    },1000)
  }
  autoPlay();//马上调用,我试过用window.onload调用这个方法,但是调用之后影响到了其他方法,使用autoPlay所以只能这样调用了

  //div的鼠标移入移出事件
  box.onmouseover=function(){
    clearInterval(play);
  };
  box.onmouseout=function(){
    autoPlay();
  };
  //按钮下标也要加上相同的鼠标事件,不然图片停止了,定时器没停,会突然闪到很大的数字上。 貌似我可以直接追加到之前定义事件中。

</script>
</body>
</html>

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
iframe 异步加载技术及性能分析
Jul 19 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
Jun 30 Javascript
整理Javascript基础语法学习笔记
Nov 29 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
Jan 04 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
vue项目中使用axios上传图片等文件操作
Nov 02 Javascript
vue cli 全面解析
Feb 28 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
Sep 04 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 Javascript
详解ES6 中的Object.assign()的用法实例代码
Jan 11 Javascript
React配置子路由的实现
Jun 03 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 #Javascript
浏览器兼容性问题大汇总
Dec 17 #Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
Dec 17 #Javascript
js调出上下文菜单的实例
Dec 17 #Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 #Javascript
JSONObject使用方法详解
Dec 17 #Javascript
JS实现alert中显示换行的方法
Dec 17 #Javascript
You might like
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
Python连接Impala实现步骤解析
2020/08/04 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
心得体会范文
2014/01/04 职场文书
《学棋》教后反思
2014/04/14 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
综治维稳工作汇报
2014/10/27 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
python状态机transitions库详解
2021/06/02 Python
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript