jQuery无缝轮播图思路详解-唯品会

效果图如上:
需求:图片自动轮播,鼠标移上停止播放,离开恢复播放,箭头切换图片。
html代码
<!--轮播图大盒子开始-->
<div class="wrap">
<!--大盒子上部分轮播图-->
<div class="wrapUp">
<ul>
<li class="cur"><a href="#"><img src="data:images/banner/banner01.jpg" alt=""></a></li>
<li><a href="#"><img src="data:images/banner/banner02.jpg" alt=""></a></li>
<li><a href="#"><img src="data:images/banner/banner03.jpg" alt=""></a></li>
<li><a href="#"><img src="data:images/banner/banner04.jpg" alt=""></a></li>
</ul>
<span class="btn left"><</span>
<span class="btn right">></span>
</div>
<!--大盒子下部分标题-->
<div class="wrapDown">
<ol>
<li class="cur">大牌特惠</li>
<li>住进北欧</li>
<li>绵绵爱意</li>
<li>母婴盛宴</li>
</ol>
<!--底部红色下划线-->
<span class="line"></span>
</div>
</div>
CSS样式代码
<style>
*{margin: 0;padding:0;list-style: none}
/*设置页面图片背景*/
body{background:url("images/banner/bg.jpg")no-repeat center top;}
/*大盒子样式宽高,盒子投影,内边距*/
.wrap{width: 1170px;height: 452px;background:rgba(255,255,255,0.5);margin:30px auto;
padding:12px 12px 0;box-sizing:border-box;box-shadow:0 0 10px rgba(0,0,0,0.4);overflow: hidden}
/*图片盒子宽高,定位样式*/
.wrapUp{width: 1146px;height: 400px;position: relative;}
.wrapUp li{position:absolute;left:0;top:0;display: none;}
.wrapUp .cur{display: block;}
/*盒子两边箭头样式*/
.wrapUp .btn{width: 33px;height: 66px;background:rgba(0,0,0,0.2);
position: absolute;color:#ffffff;font-size: 40px;line-height: 66px;text-align: center;
font-family:"黑体";border-radius:5px;top:50%;transform:translateY(-50%);cursor: pointer;transition:0.3s}
/*盒子左箭头样式*/
.wrapUp .left{left: -45px}
.wrapUp .right{right: -45px}
/*盒子移入显示*/
.wrap:hover .wrapUp .left{left:0}
.wrap:hover .wrapUp .right{right:0}
/*盒子不透明度变化*/
.wrapUp .btn:hover{background:rgba(0,0,0,0.4);} /*大盒子下部分标题样式*/
.wrapDown{width: 800px;height: 40px;margin:0 auto;position: relative}
/*大盒子下部分内容li样式*/
.wrapDown li{width: 200px;height: 40px;font-size: 15px;line-height: 40px;float: left;text-align: center;color: #666666;position: relative;cursor: pointer}
/*每个li后面的分割线样式*/
.wrapDown li:after{content:"|";position: absolute;right: 0;top:0;color: #cccccc}
/*设置第一个li字样式*/
.wrapDown .cur{color:red;}
/*最后一个li不需要分割线*/
.wrapDown li:last-child:after{display: none}
/*底部红色下划线相对于底部盒子定位*/
.wrapDown .line{width: 200px;height: 2px;background:deeppink;left: 0;bottom:-1px;position: absolute}
</style>
jQuery代码
<script>
//鼠标以上通过索引值切换
//图片
//当前文字颜色
$(".wrapDown li").mouseenter(function () {
//定义变量接收索引值
var index=$(this).index();
console.log(index);
play(index);
//根据索引值图片
/* $(".wrapUp li").eq(index).stop().fadeIn().siblings().stop().fadeOut();
//文字切换
$(".wrapDown li").eq(index).addClass("cur").siblings().removeClass("cur");
//滑动线切换
$(".line").stop().animate({left:index*200},100)*/
});
//把切换封装成一个函数 //自动播放
//定义播放
function play(aaa){
$(".wrapUp li").eq(aaa).stop().fadeIn().siblings().stop().fadeOut();
//文字切换
$(".wrapDown li").eq(aaa).addClass("cur").siblings().removeClass("cur");
//滑动线切换
$(".line").stop().animate({left:aaa*200},100)
}
var timer=null;//先设置个定时器timer 让值为空
var num=0;//需要有一个索引数字控制它动,初始为0
var len=$(".wrapDown li").length;//需要有一个索引值和num对比,为li的个数。
//封装自定义播放动画
function autoplay() {
timer=setInterval(function () {//此处的timer是给定时器赋值
num++;
if(num>len-1){num=0;}
play(num);
console.log(num);
},1000);
} //鼠标以上停止,鼠标离开调用自动播放
$(".wrap").hover(function () {
clearInterval(timer);
},function () {
autoplay();
});
//箭头点击切换图片
$(".right").click(function () {
num++;
if(num>len-1){num=0;}
play(num);
});
$(".left").click(function () {
num--;
if(num<0){num=len-1;}
play(num);
});
</script>
html部分步骤:
1、新建大盒子,上部分包裹轮播图和底部四个标题选项和红色 下划线。
1.1轮播图div盒子部分包含两个箭头用两个span包裹。
1.2轮播图部分div用ul插入四张图。
2、大盒子下部分是标题部分。
css样式步骤分析:
版心大盒子样式
版心部分,要给高和内边距,背景色为白色半透明,盒子投影。
盒子内边距部分,给图片一个宽,增加图片的内边距后,盒子宽度增加所以要用border-box内减去。半透明背景rgba(255,255,255,0.5);
盒子投影:box-shadow:0 0 5px rgba(0,0,0,0.3) }
第一个值是水平,第二值是垂直,第三个值模糊程度,第四个值是颜色。
图片盒子样式
四张图是淡入淡出可以用绝对定位将所有图片放在一起。
给图片盒子设置图片的宽高,然后给盒子相对定位,给li绝对定位,left,top为0。显示在第一张的是最后一个li的图片,因为层级关系。
给所有li设置隐藏。给第一个li添加类名设置display显示。
箭头盒子样式
箭头span相对于图片盒子定位后宽高才可以生效,有圆角和宽高,黑色半透明。
箭头变大设置font-family:"黑体"。
箭头盒子居中top:50%和transform:translateY(-50%);X是水平偏移,Y垂直偏移
箭头盒子是在外面,鼠标进入大盒子箭头显示,.wrap:hover .wrapUp .left{left:0}意思是
鼠标进入大盒子wrap控制左边箭头。然后给箭头盒子设置过渡动画。
鼠标移上,箭头盒子不透明度变化,调整不透明值。
图片底部标题样式
根据标题数量设置盒子的宽度高度,然后用伪类元素after和定位设置每个li后面的分割线。
JS代码部分
通过底部li的索引切换图片、文字颜色和底部红色滑动线位置。
1、鼠标移入底部li,var index=$(this).index();
2、根据索引值图片切换
$(".wrapUp li").eq(index).stop().fadeIn().siblings().stop().fadeOut();
图片、绑定的索引、淡入、其它兄弟淡出
3、文字切换,第一个li文字添加样式类名
$(".wrapDown li").eq(index).addClass("cur").siblings().removeClass("cur");
4、滑动线滑动切换
$(".line").stop().animate({left:index*200},100)
往右边滑动,移动index*滑动线宽度的距离。
用户触发的一般都要加stop()
定时器自动播放
格式:
需要一个变量var Timer=null;
然后再需要一个变量var num=0;需要有一个数字控制图片动,初始为0
一共4个图,所以要num++;而且要在定时器里面做一个如果num大于索引值最大为3的判断,num就变成0,这样图片会从第一张重新开始播放。
setInterval为定时调用的函数,调用执行文字图片滑动线的切换。
jQuery无缝轮播图思路详解-唯品会的更多相关文章
- Jquery无缝轮播图的制作
轮播是html页面中比较常见的一种展现形式,也是基础,把轮播图做好,是排版中比较关键的 1.首先是轮播的html元素放置:做轮播之前,要有一个初步的认识 2.每个元素的位置怎样摆放,也是很关键的,这里 ...
- 纯JS实现轮播图特效——详解
<div id="slider"> <div id="sliderImgs"> <img src="img/mi04.j ...
- jQuery插件slides实现无缝轮播图特效
初始化插件: slides是一款基于jQuery无缝轮播图插件,支持图内元素动画,可以自定义动画类型 1 2 3 4 5 6 7 8 9 10 $(".slideInner").s ...
- 用jQuery实现轮播图效果,js中的排他思想
---恢复内容开始--- jQuery实现轮播图不用单独加载. 思路: a. 通过$("#id名");选择需要的一类标签,获得一个伪数组 b.由于是伪数组的原因,而对数组的处理最多 ...
- js 实现淘宝无缝轮播图效果,可更改配置参数 带完整版解析代码[slider.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写淘宝无缝轮播图效果 需求分析: ...
- JQ无缝轮播图-插件封装
类似京东的这种无缝轮播效果: 实例代码下载 HTML代码: <body> <!-- /*觅me 探索生活*/ --> <div class="test" ...
- 用js和jQuery做轮播图
Javascript或jQuery做轮播图 css样式 <style> a{ text-decoration:none; } .naver{ width: 100%; position:r ...
- python编写微信公众号首图思路详解
前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...
- 记一个jquery 无缝轮播的制作方法
接触前端也很久了,今天才发现,要做好一个轮播,其实有很多东西需要考虑进去,否则做出来的轮播效果并不好,下面我就来做一个轮播,是依赖jquery来写的 1.要做轮播,首先需要的是HTML的内容,css的 ...
随机推荐
- circus web console 依赖tornado>3.2 无法访问的bug
circus web console 是一个很不错的web 监控circus 工具,但是对于高版本一直存在一个bug 信息如下 Traceback (most recent call last): F ...
- c语言中一种典型的排列组合算法
c语言中的全排列算法和组合数算法在实际问题中应用非常之广,但算法有许许多多,而我个人认为方法不必记太多,最好只记熟一种即可,一招鲜亦可吃遍天 全排列: #include<stdio.h> ...
- Java基础教程(全代码解析)
字面量: 整数字面量为整型(int) 小数字面量为双精度浮点型(double) 数据类型: byte short int long float double 接下来代码展示理解 public clas ...
- javascript加密之md5加密
原作地址:JavaScriptMd5 修改备用:JavaScriptMd5.rar
- ES6 展开运算符 三个点实际功能
1.数组中使用let defaultColors = ['red', 'greed'] let favoriteColors = ['orange', 'yellow'] let fallColors ...
- Lomok @Data使用
看了廖师兄的Springboot视频发现很多很好玩的小工具,lombok就是其中一个.lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,简单来 ...
- fluent运行过程中转换边界
我们以一个简单的VOF算例来说明,算例模型如下: 算例中空气为主相,水为次相.开始时刻,inlet_one设置为速度入口边界,速度为1m/s,且水的体积分数为100%,inlet_two设置为速度入口 ...
- CFD-Post批量添加截面
有时候我们需要在一个算例中截取多个面 我们打开CFD-Post 我们编写如下的Python代码来实现在一个算例当中截取多个面 源代码如下: 上述代码完成以后,我们重新打开CFD-Post
- (三)Cisco dhcp snooping实例1-单交换机(DHCP服务器和DHCP客户端位于同一VLAN)
环境:cisco dhcp server和客户端都属于vlan27,dhcp server 接在交换机G0/1,客户端接在交换机的G0/2 cisco dhcp server相关配置 ip dhcp ...
- forEach, map, filter方法区别
听说for循环已经成了菜鸟标配...? 瑟瑟发抖 赶紧找来资料补一补 1, forEach循环,循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度 2, map函数,遍历数组每个元素 ...