轮播图 - JQurey

.html 结构文件

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>jq轮播图</title>
	<link rel="stylesheet" href="css/jq_scroll.css">
</head>
<body>
	<div class="scroll">
		<!-- 图片区域 img-->
		<div class="scroll-img">
			<!-- 假图 -->
			<img src="img/004.jpg" alt="">

			<img class="active" src="img/001.jpg" alt="">
			<img src="img/002.jpg" alt="">
			<img src="img/003.jpg" alt="">
			<img src="img/004.jpg" alt="">

			<!-- 假图 -->
			<img src="img/001.jpg" alt="">
		</div>
		
		<!-- 右下角切换按钮 tag -->
		<ul class="scroll-tag">
			<li class="active"></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>

		<!-- 左右切换图 toggle-->
		<div class="scroll-toggle">
			<i class="toggle-left"><</i>
			<i class="toggle-right">></i>
		</div>

	</div>
</body>
<script src="js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="js/jq_scroll.js"></script>
</html>

 

 

.css 样式文件

html, body, ul,img{
	margin: 0;
	padding: 0;
}
ul {
	list-style: none;
}

/*图片位置设置*/
.scroll, .scroll-img, img {
	width: 613px;
	height: 230px;
}
.scroll {
	margin: 50px auto;
	position: relative;
	/*用户不可拖拽选中*/
	user-select: none;
	
	/*壁纸超出部位不可见*/
	overflow: hidden;
}

/*设置轮播图片,为长条滚动显示*/
.scroll-img{
	position: absolute;
	/*走马灯,壁纸长度为真图数加头尾两个假图*/
	width: calc(613px * 6);

	left:-613px;
}

.scroll-img img{
	/*img浮动清除图片之间的空格*/
	float: left;
}

/*右下选图按钮 tag*/
ul{
	position: absolute;
	bottom: 10px;
	right: 20px;
}
li{
	/*画圈用于点击*/
	width: 8px;
	height: 8px;
	border: 2px solid #888;
	border-radius: 50%;

	float: left;
	margin-left: 10px;
	background-color: transparent;

	/*鼠标悬浮样式*/
	cursor: pointer;
}
/*活跃状态下的li,变色*/
li.active {
	transition: .2s;
	background-color: #999;
}

/*左右切换按钮*/
.toggle-left, .toggle-right {
	width: 40px;
	height: 80px;
	background-color: rgba(255,255, 255, 0.7);
	line-height: 80px;
	text-align: center;
	font-size: 30px;
	position: absolute;
	top: 75px;
	border-radius: 5px;

	/*默认状态不可见*/
	opacity: 0;
}
.toggle-left {
	left: 2px;
}
.toggle-right {
	right: 2px;
}
/*鼠标悬浮,可见,鼠标状态改变*/
.scroll:hover .toggle-left, .scroll:hover .toggle-right {
	transition: .1s;
	opacity: 1;
	cursor: pointer;
}

 

.js 文件

// 自动滚动,一直做左移,到末尾假图重置
// 使用定时器,加可控制参数scroll_disable

// 图片数量
var imgCount = 4;

var timer = 0;

// 用来保证进入单个动画能被完整结束
var scroll_disable = false;

function autoScroll() {
	timer = setInterval(function () {
		// false 进入
		if(!scroll_disable){
			// 用于确保进入之后,不执行完毕就被再次调用执行
			scroll_disable = true;

			// 总图已经滚动的距离,相对移动的左端
			var current_left = $('.scroll-img').position().left;
			// 滚动长度是图片的长度
			var scroll_width = $('.scroll-img img').width();
			// console.log(current_left);
			// console.log(scroll_width);

			// 动画操作,总图的拖拽操作
			$('.scroll-img').animate({
				left:current_left - scroll_width
			},300,function () {
				// 动画执行完毕重置可进入滚动的条件
				scroll_disable = false;

				// 图片停留在假图,进入判断
				if(current_left<=-(scroll_width*imgCount))
				{
					$(this).css({
						// 尾假图,变成相应的真图1的位置
						left:-scroll_width
					})
				}

			})

			// tag操作,切换活跃的对象
			// js操作获取绝对值
			var index = Math.abs(current_left/scroll_width);
			// 当index为图片数量,重置索引为0
			if(index == imgCount){
				index = 0;
			}
			// eq(index)  匹配一个给定索引值的元素
			// siblings([expr]) 筛选同辈元素
			// 链式赋值,对 .scroll-tag 子代中对应索引添加活跃状态,解除所有同辈的活跃状态
			$('.scroll-tag').children().eq(index).addClass('active').siblings().removeClass('active');
		}
	},2500)
}

autoScroll()
// 鼠标事件监控,悬浮清动画,离开启动
// 悬浮显示左右按键,离开清除
$('.scroll').mouseover(function () {
	clearInterval(timer);

})
$('.scroll').mouseout(function () {
	autoScroll();
})

// toggle-right 下一张图片,切换同自动轮播
$('.toggle-right').click(function () {
	if (!scroll_disable) {
		// 在本次动画未结束时,让用户无法进行下一次点击
		scroll_disable = true;

		// console.log("right btn action");
		// 图片右滚
		// 点击一下右键,在原位置(left偏移)基础上往右滚一个图片宽度

		// offset() 距离窗口左上角的top与left
		// console.log($('.scroll-img').offset());
		// position() 距离定位父级左上角的top与left
		// console.log($('.scroll-img').position());

		// 当前整个view的做左移量
		var current_left = $('.scroll-img').position().left;
		// 一次动画滚动的距离
		var scroll_width = $('.scroll-img img').width();
		$('.scroll-img').animate({
			left: current_left - scroll_width
		}, 300, function () {
			scroll_disable = false;
			// 显示末尾假图时
			// console.log(current_left);
			if (current_left <= -(scroll_width * imgCount)) {
				// 切换为首位真图
				$(this).css({
					left: -scroll_width
				})
			}
		})

		// tag切换
		var index = Math.abs(current_left / scroll_width);
		// console.log(index);
		if (index == imgCount) {
			index = 0;
		}
		// tag下面的index索引指向的li变成活跃状态,该li的其他兄弟,都变成不活跃状态
		$current_li = $('.scroll-tag').children().eq(index);
		$current_li.addClass('active');
		$current_li.siblings().removeClass('active');

		// $('.tag').children().eq(index).addClass('active').siblings().removeClass('active');

	}
})

// toggle-left
$('.toggle-left').click(function () {
	if (!scroll_disable) {
		// 在本次动画未结束时,让用户无法进行下一次点击
		scroll_disable = true;

		// 当前整个view的做左移量
		var current_left = $('.scroll-img').position().left;
		// 一次动画滚动的距离
		var scroll_width = $('.scroll-img img').width();
		$('.scroll-img').animate({
			left: current_left + scroll_width
		}, 300, function () {
			scroll_disable = false;
			// 在首位假图时
			// console.log(current_left);
			if (current_left >= -scroll_width) {
				// 切换为首位真图
				$(this).css({
					left: -scroll_width * imgCount
				})
			}
		})

		// tag切换 对应关系 1=>3 4=>2 3=>1 2=>0
		var index = Math.abs(current_left / scroll_width) -2;
		if (index == -1) {
			index = imgCount-1;
		}
		// tag下面的index索引指向的li变成活跃状态,该li的其他兄弟,都变成不活跃状态
		$current_li = $('.scroll-tag').children().eq(index);
		$current_li.addClass('active');
		$current_li.siblings().removeClass('active');

		// $('.tag').children().eq(index).addClass('active').siblings().removeClass('active');

	}
})

$('.scroll-tag').children().click(function () {
	// console.log($(this).index());
	// var $li = $(this);

	// 切换活跃的tag li
	$(this).siblings('.active').removeClass("active");
	$(this).addClass('active');


	// 当前点击点的索引
	var current_index = $(this).index();  // 0 | 1 | 2 | 3
	// 一次动画滚动的距离
	var scroll_width = $('.scroll-img img').width();

	console.log(current_index);
	console.log(scroll_width);
	// 切换图片 view
	// 当前点击的父亲相邻哥哥,做动画
	$(this).parent().prev().animate({
		// +1 初始左侧有一张假图
		left: -(current_index + 1) * scroll_width
	}, 300)
})

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值