JS原生轮播图实现

阳光穿透心脏的1/2处 2022-06-07 10:56 403阅读 0赞

作为一个PHP全栈攻城狮,不仅要会后端PHP和数据库,还要会前端JS。今天源码时代 PHP培训 学科老师要和大家分享一下JS原生编写轮播图的插件。 说起轮播图,很多人会选择使用各种插件,比如基于JQuery或其它框架的。不瞒大家,我也用过,甚至还用过Flash的轮播图。总体来说,用起来是比较简单,但是有一个非常严重的问题,那就是加载速度非常非常慢。

如果能自己使用JS原生写一个轮播图,不仅速度快,那感觉也是高大上,颇有高级前端工程师的feel啊。不过今天为了大家好理解,我们使用面向过程的代码编写(面向过程关注细节,方便理解原理;面向对象使用方便,但不方便新手理解)。

在开始编写之前我们需要准备几张测试图片,以及一些技术基础:JavaScript、HTML、CSS。为了方便测试,我们约定一下测试环境:三张相同大小的图片放在images目录中,所有的JS、HTML、CSS代码写在一个html文件中;由于使用了新的DOM API,所以建议使用chrome50以上版本的浏览器。

编写思路:
1)来三张图和三个按钮,将所有图片排成一行,将第一张复制一份放在最后(也可以全部复制放在后面,但只会用到第一张,重复出现一次三张图,一共六张图)
2)通过外边距偏移实现轮播
默认显示第1张图
第1次改变,第1张图移出,第2张图出现
第2次改变,第2张图移出,第3张图出现
第0次改变,第3张图移出,第4张图出现(第4张是第1张的复制,用户感觉是回到了第1张)
轮回,第0次改变,瞬间将移回第1张,由于第4张图和第1张一样,所以用户无法感觉这个变化,然后继续第1张图移出,第2张出现

3)给按钮添加点击事件
触发时停止自动播放,并切换到指定的图片

第一步:编写HTML和CSS
编写HTML:
三张图
三个按钮
编写CSS:
将所有图片排成一行
将按钮排到轮播图中间底部
设置按钮的状态样式

代码如下:

  1. <!DOCTYPE html>

  2. 轮播图1

    • 0
    • 1
    • 2

复制代码

第二步:编写JavaScript获取元素
获取轮播图片总数(用于计算显示轮回)
获取每屏宽度(用于计算每次偏移量)

代码:

复制代码

第三步:实现轮播
设置定时器实现隔3秒切换一张图片
切换图片时,需要传入切换到指定图片的编号
计算偏移量
设置定时器实现偏移时的动画效果
实现按钮状态同步变化

  1. JS代码:
  1. //通过偏移实现动画

  2. function show(n){

  3. if(n==1){ //这个判断顺序很关键,必须放在上面,实现最后一张瞬间切回第一张,再转到第二张

  4. list.style.marginLeft=’0px’;

  5. }

  6. /*

  7. 默认出现第1张

  8. n=1 动画出现第二张,第一张消失

  9. n=2 动画出现第三张,第二张消失

  10. n=0 动画出现第四张(第一张的复制),第三张消失

  11. n=1 瞬间切回第一张(由于第一张和第四张相同,肉眼看不出变化),再动画出现第二张,第一张消失

  12. */

  13. var w=n>0 ? -(n-1)*li_width : -(len-1)*li_width; //计算偏移量,以实现动画效果,等于0时特殊处理,展示手动加的那一张

  14. var step=20; //步长可根据宽度计算得到

  15. var i=step;

  16. var timer=setInterval(function(){

  17. list.style.marginLeft=(w-i)+’px’;

  18. i+=step;

  19. if(i>li_width){ //显示完一张图就停止

  20. clearInterval(timer);

  21. }

  22. },20);

  23. //改变按钮状态

  24. for(var j=0; j<icos.length; j++){

  25. if(n==j){

  26. icos[j].className=’on’;

  27. }else{

  28. icos[j].className=’’;

  29. }

  30. }

  31. }

  32. //自动播放函数

  33. function autoplay(){

  34. var count=1; //初始是第1张,自动播放从第2张开始

  35. timeId=setInterval(function(){

  36. show(count % len); //取余数实现轮流播放

  37. count++;

  38. },3000);

  39. }

  40. autoplay();

复制代码

第四步:按钮功能
给所有按钮添加事件
点击时停止自动播放,切换到指定的图片

JS代码:

  1. //给每一个按钮绑定事件

  2. for(var i=0; i<icos.length; i++){

  3. icos[i].οnmοuseοver=function(){ //鼠标移到小图标上时取消自动播放并切换到指定的图片上

  4. clearInterval(timeId);

  5. show(this.innerText);

  6. }

  7. icos[i].οnmοuseοut=function(){ //鼠标移开时继续自动播放

  8. autoplay();

  9. }

  10. }

复制代码

代码汇总:

  1. <!DOCTYPE html>

  2. 轮播图1

    • 0
    • 1
    • 2

复制代码

总结,和所有的PHP框架一样,所有JS框架和库都是基于原生JS编写的,只有把原生JS的代码掌握好,才能以不变应万变,在技术领域平静对待各种变化。

本文来源:http://bbs.itsource.cn/thread-1662-1-1.html,转载请注明出处!

发表评论

表情:
评论列表 (有 0 条评论,403人围观)

还没有评论,来说两句吧...

相关阅读

    相关 原生js实现

            很多很多网站经常会用到一个特效,那就是轮播图,对于日新月异的前端技术来说其实就是一个框架一个接口的事,但轮播的原理是什么?用最原始的javascript来写又是

    相关 原生js实现

    轮播图基本上是前端所必须面临的一个功能。而且在网上可以找到各种各样的插件或者写法。 但是我个人觉得还是写一下比较好。这里用到的是原生JS、CSS3相结合的写法。 对IE 8

    相关 原生js实现

    原生js实现轮播图  很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出。  [