最近工作不是很忙,正好可以多多练习一下jq,毕竟这块我实在是基础薄弱,在工作中经常会遇到各种各样的问题,导致效率很低。

今天的案例是一个自动轮播图:

上面的轮播图跟以往的轮播有点区别,常见的轮播图是只展示一张图片,其他图片是隐藏的。常见轮播图的实现方式是所有图片一行排列,依次改变图片的margin-left值,如果要实现无缝轮播,则需要复制一份第一张放在图片集合的最后。

此处要实现的效果,图片有前有后,则需要用到景深。

注意:添加景深效果时需要给父级添加

然后给每张图片设置position:absolute,父级添加position:relative,此时所有的图片会重叠展示。然后根据图片集合的for循环,给每张图片添加transform:translateX()横向偏移距离,保证图片出现左右方向的错位。

html部分
这个部分是最简单的:

<div class="wrapper" id="wrap"><div class="img-box"><img src="./img/1.png" alt="" /><img src="./img/2.png" alt="" /><img src="./img/3.png" alt="" /><img src="./img/4.png" alt="" /><img src="./img/5.png" alt="" /></div><div class="list"><ul><li class="active"></li><li></li><li></li><li></li><li></li></ul></div>
</div>

css部分
先分析一下样式:

  1. 父级元素添加景深效果,且为flex横向布局
  2. 子级图片部分position:absolute,相对于父级绝对定位,并添加transition动画
* {margin: 0;padding: 0;list-style: none;font-size: 0;
}.wrapper {position: relative;width: 600px;height: 400px;border: 1px solid #000;margin: 100px auto;display: flex;justify-content: center;align-items: center;transform-style: preserve-3d;perspective: 800px;
}.wrapper .img-box {width: 500px;height: 300px;
}.wrapper .img-box img {position: absolute;width: 500px;height: 300px;box-shadow: 0 8px 30px #ddd;transition: transform 0.5s ease-in-out;
}.wrapper .list {position: absolute;width: 100%;height: 50px;bottom: -70px;left: 0;text-align: center;
}.wrapper .list ul {display: inline-block;
}.wrapper .list ul li {width: 15px;height: 15px;background-color: #ccc;border-radius: 50%;display: inline-block;margin-left: 10px;cursor: pointer;
}.wrapper .list ul li.active {background-color: red;
}

js部分:这个是最最重要的,其实这个代码里面的根据索引求取位置的部分,我还没有想明白。将这个案例的老师都是一带而过,我不知道为什么要这么写,感觉有点懵……

分析一下js部分的代码:

  1. jq很容易获取到img的图片集合dom
  2. 将索引为0的图片默认为中间的一张图片,通过中间索引-i-1获取左侧的图片索引,通过中间索引+i+1获取右侧的图片索引,针对左侧的图片,transform:translateX(负数),针对右侧的图片,transform:translateX(正数).具体移动的距离跟索引也是有关系的。
  3. 案例中为了更直观的理解,将中间索引默认为0,左侧的索引默认为-2,-1也就是3,4,右侧的索引默认为1,2

具体代码如下:

var curDisplay = 0; //记录当前展示图片索引
// 锁  防止连续点击
var flag = true;
var timer;
var imgLen = $('img').length;
// 初始化函数
function init() {move();bindEvent();
}
init();
//移动函数
function move(){var hLen = $('img').length / 2;//记录分散在左右的图片索引var lNum,rNum;//利用for循环与中间值为左右索引赋值for(var i = 0;i<hLen;i++){//左侧图片的索引lNum = curDisplay - i - 1;//左侧图片水平方向平移$('img').eq(lNum).css({transform:'translateX('+ (-150*(i+1)) +'px) translateZ('+ (100 - i*100) +'px)'});//计算右侧图片索引值rNum = curDisplay + i + 1;//临界值判断if(rNum > imgLen - 1){rNum -= imgLen;}//右侧图片向右平移$('img').eq(rNum).css({transform:'translateX('+ (150 * (i+1)) +'px) translateZ('+ (100 - i*100) +'px)'})}//中间显示图片向前平移$('img').eq(curDisplay).css({transform:'translateZ(200px)'})//绑定动画运动结束事件  当一次动画结束后才能进行下一次运动$('img').on('transitionend',function(){flag = true;});changeStyle();
}
function bindEvent(){$('img').add('.list li').on('click',function(e){if(flag){flag = false;//将当前显示图片切换为当前点击图片curDisplay = $(this).index();console.log($(this).index());move();}}).hover(function(){//鼠标覆盖清除定时器clearInterval(timer);},function(){//鼠标移走设置定时器timer = setInterval(function(){play();},2000)})timer = setInterval(function(){play();},2000)
}
//自动播放
function play(){if(curDisplay == imgLen - 1){curDisplay = 0;}else{curDisplay++;}move();
}
//改变list小圆点选中状态
function changeStyle(){$('.active').removeClass('active');//将当前选中的图片对应额小圆点设置为选中状态$('.list li').eq(curDisplay).addClass('active');
}

jq实现轮播图(景深效果)——功能实现相关推荐

  1. html+css部分面试题(4)+拼多多商家入驻网页轮播图hover效果

    目录 31:为什么要初始化样式? 32. BFC 是什么? 33.HTML 与 XHTML--二者有什么区别? 34.html 常见兼容性问题? 35.对 WEB 标准以及 W3C 的理解与认识 补充 ...

  2. html轮播图循环效果,TremulaJS-跨设备多功能的无限循环js轮播图插件

    TremulaJS是一款非常酷的跨设备多功能的无限循环js轮播图插件.TremulaJS是一个客户端javascript UI组件,它基于贝兹曲线和物理动量效应制作各种效果,可以制作无限循环的图片流, ...

  3. html旋转木马切换效果,超酷jQuery 3D旋转木马效果轮播图插件 -HTML5功能

    简要教程 jCarrousel是一款炫酷且强大的3D旋转木马效果轮播图jQuery插件.该旋转木马插件可以自适应屏幕大小来调整图片的间距,可实现自动播放等.jCarrousel代码简洁,使用简单,值得 ...

  4. JQ 实现轮播图(3D旋转图片轮播效果)

    轮播图效果如下: 代码: <!DOCTYPE html> <html xmlns="/www.w3.org/1999/xhtml"> <head> ...

  5. 自已动手写的轮播图插件,功能不断增加中,可以下载

    前,平时总是使用别人的轮播图插件,这次决定自已写一个,功能越多越好.实际现起来,发现并不容易.先实现基本的功能,下两周要丰富起来. 图是别人的图,心是自已的心.直接上代码: 一:结构 <!-- ...

  6. html原生轮播图的实现,使用原生js实现点击切换图片(轮播图)效果

    要实现的功能大致为: 点击两边的切换按钮,可以按顺序切换不同的图片 具体操作如下: 一.布局html 1.添加一个div容器 2.添加一个轮播图img标签 3.添加两个按钮img标签 二.css样式设 ...

  7. 微信小程序之实现层叠轮播图的效果案例(前端学习收藏夹必备)

    效果展示 代码展示: WXML代码 <view class="selection_cards" bindtouchstart="touchstart" b ...

  8. 用Flutter实现一个类似于轮播图的效果

    效果图: 过程脑洞自补!!! 类似于上图的效果,我们应该能想到用PageView来实现,但是思来想去,PageView官方并没有给自定义的参数,就是我们需要的下面的指示器的效果.现在我就来说下一下怎么 ...

  9. js判断定时器是否启动_原生js如何做出轮播图的效果

    <div class="box"><ul><li class="active"><img src="./im ...

最新文章

  1. 有哪些看起来很沙雕的公众号,实质上却年薪百万?
  2. 两种ICP的改进算法:PLICP与NICP
  3. 初中python编程教学的困难与解决研究_初中信息技术课程中存在的问题与解决方案研究...
  4. 【机器学习】什么是机器学习?(上)
  5. 逆序输出螺旋字符矩阵(三种方法)
  6. python如何读取文件夹下的子文件夹
  7. 使用 baget 搭建 nuget 私有服务
  8. 英特尔x722网卡驱动_产品详情 | 从核心到边缘,英特尔加速5G网络基础设施建设...
  9. HDP Hive StorageHandler 下推优化的坑
  10. Linux系统编程——进程间的通信(三)消息队列原理以及用法
  11. 目前电子计算机处于什么时代,目前,电子计算机处于哪大规模和超大规模集成电路时代。()...
  12. 读出我潮流 亚马逊Kindle新品焕彩上市
  13. 实对称阵的正交相似对角化
  14. tomcat运行超时问题解决
  15. mysql dump gtid_GTID环境下mysqldump set-gtid-purged取值
  16. 在智能家居音箱领域上的音频功放芯片IC
  17. UE4--局域网多人联机
  18. 2020-10-20 Ant Design Vue 关闭国际化设置默认语言为中文的
  19. cloudstack vpc network egress-ingress rules
  20. 促进企业流量高质量转化,华为云CDN加速方案值得选择

热门文章

  1. linux下载命令wget
  2. 计算机音乐谱连借口都没有,抖音连借口都没有是什么歌
  3. Android 机顶盒Mobx 对接xbmc
  4. HarmonyOS剪贴板开发代码演示
  5. Java_Day10 final关键字、权限修饰符、内部类
  6. android聊天软件大报告,大改变聊天app下载-大改变聊天神器预约 安卓版v1.0-PC6安卓网...
  7. cJSON介绍及使用
  8. Rootkit:系统灰色地带的潜伏者
  9. C++类中的拷贝构造函数
  10. 手机音质变差_为什么手机听音乐音质很差