在以往的认知中,一直以为用原生JS写轮播是件很难得事情,今天上班仿照网上的写了一个小demo。小试牛刀。

大致效果:

html结构很简单,两个列表,一个代表图片列表,一个是右下角序号列表。

<div id="box">
<ul class="list">
<li><img src="01.jpg" width="490" height="170" /></li>
<li><img src="02.jpg" width="490" height="170" /></li>
<li><img src="03.jpg" width="490" height="170" /></li>
<li><img src="04.jpg" width="490" height="170" /></li>
<li><img src="05.jpg" width="490" height="170" /></li>
</ul>
<ul class="count">
<li class="current">1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>

布局的大致想法是图片全部绝对定位重合,透明度为1,右下角序号给选中的添加样式。样式都很简单。

关于JS方面,自己还是捉摸了很久,刚开始实现时,当鼠标移入右下角对应序列号时图片能够准时切换,但是鼠标移出时便不能自动播放,关于setInterval和clearInterval自己的处理还是不是很好。借鉴了网上的案列之后,具体的实现逻辑简单为,先写一个图片的展现方法,和鼠标移出图片时的定时函数。这样可以在事件中直接调用,值得注意的一点就是在鼠标移入时,记得清除定时器。下面上代码:

这是图片展示函数,参数为当前的展示的index。先让所有图片透明度为0;所有下标没有样式,然后给当前的加上样式,透明度为1;

   function show(a){
for(var i=0;i<oLi.length;i++){
oLi[i].style.opacity= 0;
oImg[i].className = '';
}
oLi[a].style.opacity = 200;
oImg[a].className = 'current';
}

然后写一个鼠标移除时的定时器,图片自动轮播函数:

   function autoplay(){
time = setInterval(function(){
b++;
if(b>=oImg.length){
b=0;
}
show(b);
},1000);
}
autoplay();//自动运行

最后是鼠标移入移出事件:

 for(var i=0;i<oImg.length;i++){
oImg[i].index = i;
oImg[i].onmouseover=function(){
clearInterval(time);
show(this.index)
}
oImg[i].onmouseout=function(){
autoplay();
}
}

代码只是写了一个结构骨架,实现大致效果,具体可以优化的地方还有很多,对于动效方面可以对透明度的改变设置一个函数,让透明度缓慢变成1,或者对图片的定位和移动方向进行改变,实现真正意义上的左右轮播。大致原理都是差不多的。

原生JS实现轮播,于我而言还是有点小难度的,因为JS写的比较少,所以对于整体的逻辑把握不好,虽有曲折,但是靠着自己也是写了出来。

总结一些轮播遇到的大致困难,第一个是对于鼠标移出时的定时自动轮播,刚开始自己是写在事件onmouseout里面的,但是测试过程中发现事件只会触发一次,所以导致轮播不能执行,所以选择在重新写了一个方法。第二个就是对于函数的传参问题,我写函数一直没有传参的习惯,都是匿名函数,虽然知道适用场景不同,对函数的运用应该灵活,可能是因为做的项目太少,经验还是太不足,第三个就是细节方面,例如移入时清除定时器,轮播要先执行一次等。总之收获还是很大的。

感谢阅读。

原生JS实现幻灯片轮播效果的更多相关文章

  1. 原生js实现图片轮播效果

    思路:设置父容器(一定宽度,一定高度,相对定位,子容器超出部分进行隐藏),子容器图片并排(浮动,绝对定位,每次点击进行相应的左或右偏移量) 1.html: <!DOCTYPE html> ...

  2. 原生JS实现简易轮播图

    原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = funct ...

  3. 原生js实现无缝轮播

    原生js实现无缝轮播 因为要做到无缝,所以就要把第一张图片和最后一张连接起来,在此处采用js克隆了第一张图片的节点,添加到最后,显示图片序号的小圆按钮也是使用js动态添加的. html部分 <d ...

  4. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

  5. jQuery与原生js实现banner轮播图

    jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...

  6. 原生js实现图片轮播思路分析

    一.复习原生js实现图片轮播 1.要点 自动轮播 点击小圆圈按钮,显示相应图片 点击左右箭头,实现向前向后轮播图片 2.实现思路 <div id="container"> ...

  7. 自己用原生JS写的轮播图,支持移动端触屏滑动,面向对象思路。分页器圆点支持click和mouseover。

    自己用原生javascript写的轮播图,面向对象思路,支持移动端手指触屏滑动.分页器圆点可以选择click点击或mouseover鼠标移入时触发.图片滚动用的setInterval,感觉setInt ...

  8. html中使用JS实现图片轮播效果

    1.首先是效果图,要在网页中实现下图的轮播效果,有四张图片,每张图片有自己的标题,然后还有右下角的小方框,鼠标悬浮在小方框上,会切换到对应的图片中去. 2.先是HTML中的内容,最外层是轮播图整个的容 ...

  9. 自己用原生JS写的轮播图,支持移动端触摸滑动,分页器圆点可以支持mouseover鼠标移入和click点击,高手看了勿喷哈

    自己用原生JavaScript写的轮播图,分页器圆点按钮可支持click点击,也可支持mouseover鼠标悬浮触发,同时支持移动端触摸滑动,有兴趣的友友可以试试哈,菜鸟一枚,高手看了勿喷,请多多指正 ...

随机推荐

  1. PHP向MySql中插入数据

    <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Prope ...

  2. nodejs 基本问题答疑

    传统服务器架构1.服务器接到请求2.创建一个新的响应程序的实例 node服务器架构1.服务器接到请求2.检查处理程序是否存在,如果存在直接处理,不存在则创建. node的做法节省了内存 ubuntu下 ...

  3. 在线App开发平台——应用之星傻瓜式开发平台

    随着智能手机及APP应用程序的普及,越来越多的企业和个人意识到APP的营销价值,出于对技术的敬畏,很多企业下意识认为开发APP是一个有难度的技术活,所以很多时候有心无力,也担心APP的后续的技术支持. ...

  4. SpringMVC 测试 mockMVC

    SpringMVC测试框架 基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. 一 MockMvcBui ...

  5. AIX topas命令详解

    本文转载于:AIX topas命令详解 topas命令默认2秒更新一次 一.topas命令以区域形式表现系统各项指标性能,如下图: 1. CPU:反应CPU性能区域,如果有多个 CPU,按 c 键两次 ...

  6. Stackdump: 一个可以离线看stackoverflow的工具

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Stackdump: 一个可以离线看stackoverflow的工具.

  7. 关于T-SQL重编译那点事,WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗

    本文出处:http://www.cnblogs.com/wy123/p/6262800.html   在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的 ...

  8. NSLayoutConstraint-代码实现自己主动布局的函数使用方法说明

    [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelat ...

  9. 怎样克服 JavaScript 框架疲劳?

    [编者按]Tero Parviainen 著有 Build Your Own AngularJS,曾两次组织 Clojure CUP 竞赛,在 Twitter 上有近两千名关注者. 在本文中.Tero ...

  10. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...