jQuery实现轮播图
jQuery的fadeIn与fadeOut两个方法可以实现渐隐渐现式的轮播图,而animate 的方法则可以实现滑动式的轮播图,现在我们通过这两个方法来实现两种轮播图
渐隐渐现式轮播
渐隐渐现式的轮播是前端最常见的效果,在以前的时候,我们可以通过原生的JS去实现这个效果,现在我们学习了jQuery以后,则可以通过jQuery的自带动画方法去实现它,现在我们列举代码如下
HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>手写渐隐渐现轮播</title>
<link rel="stylesheet" href="./css/index.css" type="text/css">
</head>
<body>
<div class="slideBox">
<div class="imgBox">
<img src="./img/1.jpg" alt="">
<img src="./img/2.jpg" alt="">
<img src="./img/3.jpg" alt="">
<img src="./img/4.jpg" alt="">
</div>
<div class="slide-navigation">
<div class="prev">
<
</div>
<div class="next">
>
</div>
</div>
<ul class="pagination">
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</body>
<script src="./js/jquery.js" type="text/javascript"></script>
<script>
$(function(){
var slideIndex=0; //轮播图默认是第一张图片显示
slideChange();
$(".slide-navigation>div").click(function(){
if($(this).index()==0){
//左边
slideIndex--;
}
else if($(this).index()==1){
//右边
slideIndex++;
}
if(slideIndex<0){
//等于最后一张
slideIndex=$(".imgBox>img").length-1;
}
else if(slideIndex>$(".imgBox>img").length-1){
slideIndex=0;
}
//调用封装好的方法
slideChange();
});
function slideChange(){
$(".imgBox>img").eq(slideIndex).fadeIn().siblings().fadeOut();
$(".pagination>li").eq(slideIndex).addClass("active").siblings().removeClass("active");
}
//点击小圆点的事件
$(".pagination>li").click(function(){
slideIndex=$(this).index();
slideChange();
})
})
</script>
</html>
CSS样式代码
@charset "utf-8";
*{
margin:0px;
padding:0px;
list-style-type:none;
}
.slideBox{
width:440px;
height:440px;
position:relative;
margin: auto;
}
.imgBox{
width:440px;
height:440px;
border:1px solid red;
}
.imgBox img{
position:absolute;
left:0px;
top:0px;
}
.slide-navigation{
font-size:36px;
position:absolute;
width:100%;
top:50%;
transform:translateY(-50%);
}
.slide-navigation div{
width:50px;
height:50px;
background-color:rgba(0,0,0,0.5);
text-align:center;
line-height:50px;
border-radius:50%;
color:white;
cursor:pointer;
}
.slide-navigation .next{
float:right;
}
.slide-navigation .prev{
float:left
}
.pagination{
text-align:center;
position:absolute;
width:100%;
bottom:10px;
}
.pagination li{
width:12px;
height:12px;
background-color:black;
border-radius:50%;
display:inline-block;
cursor:pointer;
}
.pagination li.active{
background-color:red;
}
效果图
当我们去点击左右的小箭头的时候,图片会慢慢的隐藏与显示,这就是渐隐渐现式的轮播图
渐隐渐现式的轮播图是一个比较简单的轮播图,多用于门户网站
滑动式轮播图
滑式动的轮播图相较于淡入淡出式的渐隐渐现轮播它,它的难度要大一些,主要使用到的就是jQuery里面的animate()
这个方法以及回调,同时要做到循环滚动,相对麻烦,现在我们看一下主要代码
HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://at.alicdn.com/t/font_1307637_9ki21p865sv.css">
<link rel="stylesheet" href="./css/index.css">
<title>轮播图</title>
</head>
<body>
<div class="slideBox">
<div class="imgBox clearfix">
<img src="./img/4.jpg" alt="">
<img src="./img/1.jpg" alt="">
<img src="./img/2.jpg" alt="">
<img src="./img/3.jpg" alt="">
<img src="./img/4.jpg" alt="">
<img src="./img/1.jpg" alt="">
</div>
<div class="l_r">
<div class="left icon-zuo iconfont"></div>
<div class="right icon-you iconfont"></div>
</div>
<ul class="circle">
<li class="active"></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</body>
<script src="./js/jquery.js" type="text/javascript"></script>
<script>
var imgWidth;
var slideIndex=1;
$(function(){
imgWidth=$(".imgBox img").width();
$(".imgBox").css("left",imgWidth*slideIndex*(-1)+"px");
$(".slideBox .l_r div").click(function(){
//判断左右
if($(this).index()==0){
slideIndex--;
}
else if($(this).index()==1){
//向右
slideIndex++;
}
changeImage();
});
//点击小圆点,怎么搞
$(".circle li").click(function(){
slideIndex=$(this).index()+1;
changeImage();
});
//封装成方法,让图片的切换单独成一个模块,方便调用
function changeImage(){
$(".imgBox").animate({
"left":imgWidth*slideIndex*(-1)+"px"
},200,function(){
if(slideIndex>=$(".imgBox img").length-1){
slideIndex=1;
}
else if(slideIndex<=0){
slideIndex=$(".imgBox img").length-2;
}
$(".imgBox").css("left",imgWidth*slideIndex*(-1)+"px");
$(".circle li").eq(slideIndex-1).addClass("active").siblings().removeClass("active");
})
}
})
</script>
</html>
CSS代码
@charset "utf-8";
*{
margin: 0px;
padding: 0px;
list-style-type: none;
}
.clearfix::after{
content: "";
display: block;
clear: both;
}
.slideBox{
width: 1366px;
height: 768px;
border: 2px solid red;
margin: auto;
position: relative;
overflow:hidden;
}
.imgBox{
width: calc(1366px * 6);
position: absolute;
left: 0px;
top: 0px;
}
.imgBox img{
float: left;
}
.slideBox .l_r{
position: absolute;
left: 0px;
width: 100%;
top: 50%;
transform: translateY(-50%);
}
.slideBox .l_r .iconfont{
font-size: 36px !important;
color: lightgray;
}
.slideBox .l_r .left{
float: left;
}
.slideBox .l_r .right{
float: right;
}
.circle{
text-align: center;
position: absolute;
bottom: 10px;
width: 100%;
}
.circle li{
display: inline-block;
width: 12px;
height: 12px;
background-color: black;
border-radius: 50%;
cursor:pointer;
}
.circle li.active{
background-color: red;
}
在上面的HTML与JS代码里面,我们要注意一点,如果要实现循环滚动的功能 ,这个时候,需要要第一张图片的前面添加最后一张图片,同时要在最后一张的后面添加第一张图片,以实现“视觉差”的效果
效果图
使用swiper实现轮播图
在日常的开发工作当中,我们可以借助于第三方的插件实现轮播图的效果,这个插件是swiper.js
插件
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>swiper</title>
<link rel="stylesheet" href="./js/swiper/css/swiper.css">
<style>
.swiper-container{
width: 1366px;
height: 768px;
}
</style>
</head>
<body>
<div class="swiper-container">
<div class="swiper-wrapper">
<!--轮播的每一项-->
<div class="swiper-slide">
<img src="./img/1.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="./img/2.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="./img/3.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="./img/4.jpg" alt="">
</div>
</div>
<!-- 如果需要分页器 相当于轮播图里面的小圆点-->
<div class="swiper-pagination"></div>
<!-- 如果需要导航按钮 左右箭头-->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- 滚动条 -->
<div class="swiper-scrollbar"></div>
</div>
</body>
<script src="./js/swiper/js/swiper.js"></script>
<script>
//初始化 ,第一个参数是swiperClass代表要初始化的轮播的class名称
//第二个参数代表配置信息
var mySwiper=new Swiper(".swiper-container",{
loop:true, //循环
direction:"horizontal", //水平的轮播 垂直是vertical
//左右导航
navigation:{
nextEl:".swiper-button-next", //下一个
prevEl:".swiper-button-prev" //上一个
},
//分页器
pagination:{
el: '.swiper-pagination'
},
scrollBar:{
el:".swiper-scrollbar"
}
})
</script>
</html>
我们参照swiper.js的官方网站在这里实现了基本的轮播图效果,如下图所示
通过swiper.js实现的轮播图,我们可以进行鼠标滑动,这个插件可以在移动端与PC端时使用
在使用这个插件的过程中要注意几点配置
new Swiper()
在这里需要接收一个必选参数swiperClass
这个代表我们要用哪一个元素做轮播- 在实始化
new Swiper()
的过程当中,它的第二个参数代表配置项,基本常用的配置信息如下- loop是否实现循环
- direction是横向的轮播还是纵向的轮播(它的值有
horizontal
与vertical
),默认为横向horizontal
- navigation用于设置左右导航器,也就是左右的箭头
- pagination用于设置下面的小圆点
使用swipe实现app常用内页切换效果
首先我们先看一下效果图
上面的app页切换效果是前端常见的效果,我们现在通过swiper.js
这个插件去实现上面的效果
HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>猫眼</title>
<link rel="stylesheet" href="https://at.alicdn.com/t/font_1307637_hyfbu2o9u8.css">
<link rel="stylesheet" href="./css/maoyan.css">
<link rel="stylesheet" href="./js/swiper/css/swiper.css">
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function () {
//当前设备宽度/设计向的宽度*100的换算比例
document.documentElement.style.fontSize = document.documentElement.clientWidth / 750 * 100 + "px";
});
</script>
</head>
<body>
<div id="app">
<div class="header">
猫眼电影
</div>
<div class="content">
<ul class="topNav">
<li class="active">正在热映</li>
<li>即将上映</li>
</ul>
<div class="innerContent">
<div class="swiper-container">
<!-- 应该放图片轮播,我没有图片,应该放DIV -->
<div class="swiper-wrapper">
<div class="swiper-slide" style="background-color: deeppink;opacity:0.5">Slide 0</div>
<div class="swiper-slide" style="background-color: orange;opacity:0.5">Slide 1</div>
</div>
</div>
</div>
</div>
<ul class="bottomBar">
<li>
<span class="iconfont icon-dianying"></span>
<span>影片</span>
</li>
<li>
<span class="iconfont icon-yingyuana"></span>
<span>影院</span>
</li>
<li>
<span class="iconfont icon-ranking"></span>
<span>票房</span>
</li>
<li>
<span class="iconfont icon-wode1"></span>
<span>我的</span>
</li>
</ul>
</div>
</body>
<script src="./js/swiper/js/swiper.js" type="text/javascript"></script>
<script src="./js/jquery.js" type="text/javascript"></script>
<script>
$(function () {
var mySwiper=new Swiper(".swiper-container",{
//监听swiper的事件
on:{
slideChange:function(){
// mySwiper.activeIndex
$(".topNav>li").eq(this.activeIndex).addClass("active").siblings().removeClass("active");
}
}
});
//绑定上面的点击事件
$(".topNav>li").click(function(){
$(this).addClass("active").siblings().removeClass("active");
//在这里,我们能不能拿到索引
var index=$(this).index();
mySwiper.slideTo(index);
});
});
</script>
</html>
CSS代码
@charset "utf-8";
*{
margin: 0px;
padding: 0px;
list-style-type: none;
}
body{
font-size: 16px;
}
#app{
width: 100vw;
height: 100vh;
display: flex;
flex-direction: column;
}
:root{
--p_color:#E54847;
}
.header{
height: 1rem;
background-color: var(--p_color);
color: white;
display: flex;
justify-content: center;
align-items: center;
font-weight: bold;
}
.bottomBar{
height: 1.1rem;
border-top: 1px solid #ececec;
display: flex;
justify-content: space-around;
background-color: white;
}
.bottomBar li{
display: flex;
flex-direction: column;
height: inherit;
width: 1.1rem;
align-items: center;
}
.bottomBar li .iconfont{
font-size: .64rem;
}
.bottomBar li span:last-child{
font-size: .24rem;
}
.content{
flex: 1;
overflow: auto;
display: flex;
flex-direction: column;
}
.topNav{
display: flex;
height: .9rem;
}
.topNav>li{
flex: 1;
border-bottom: 2px solid lightgray;
display: flex;
height: inherit;
justify-content: center;
align-items: center;
}
.topNav>li.active{
color: var(--p_color);
border-bottom-color: var(--p_color);
font-weight: bold;
}
.innerContent{
flex: 1;
overflow: auto;
}
.swiper-container{
width: 100%;
height: 100%;
}
我们可以看到上面是两个内页的切换,如果是多个内页,我们只需在HTML里面多添加几个DIV即可