js轮播图,附带轮播图片效果(代码)

轮播动画效果(代码):来自尚硅谷视频素材:

/*
 * 可以用来获取任意的样式
 */
function getStyle(obj, name) {

	return window.getComputedStyle && getComputedStyle(obj, null)[name] || obj.currentStyle[name];
}

/*
 * 提取出一个函数,可以处理一些简单的动画效果
 * 参数:
 * 		obj: 要执行动画的元素
 * 		attr: 执行动画是要修改的属性
 * 		target: 执行动画的目标位置
 * 		speed: 执行动画的速度
 * 		callback: 回调函数,这个函数将会在动画执行完毕之后被调用
 */
function move(obj, attr, target, speed, callback) {
	//开启定时器前,关闭上一个
	/*
	 * 这里我们的timer是一个全局变量,所有的动画执行时,都会共享同一个timer
	 * 	这样将会导致我们执行box2的动画时,会使box1的动画也立即终止
	 * 	所以我们定时器的标识不能作为全局变量保存,而应该保存到要执行动画的对象上
	 */
	clearInterval(obj.timer);

	//获取当前值,动画执行的起始位置
	var current = parseInt(getStyle(obj, attr));
	//起始位置   大于  目标位置 speed为负
	//起始位置  小于 目标位置 speed为正
	if(current > target) {
		//此时speed应该是负数
		speed = -speed;
	}

	//开启一个定时器,用来移动box1
	obj.timer = setInterval(function() {
		//获取box1的left属性值
		var oldValue = parseInt(getStyle(obj, attr));
		//修改值
		var newValue = oldValue + speed;
		//如果newValue大于800
		//如果向右移动,则newValue > target  speed为正
		//如果向左移动,则newValue < target  speed为负
		if(speed > 0 && newValue > target || speed < 0 && newValue < target) {
			newValue = target
		}
		//将其赋值给box1
		obj.style[attr] = newValue + "px";
		//当运行800px时,停止执行动画
		if(newValue == target) {
			clearInterval(obj.timer);
			//动画执行完毕,调用回调函数
			callback && callback();

		}

	}, 30);
}

/*
 * 定义一个函数,专门用来为一个元素添加class属性值
 * 参数
 * 	obj 要添加class属性的元素
 * 	cn 要添加的class的值
 * 	
 */
function addClass(obj, cn) {

	//判断obj中是否含有cn这个class
	if(!hasClass(obj, cn)) {
		obj.className += " " + cn;
	}

}

/*
 * 判断一个对象中是否含有指定的class属性
 * 	参数:
 * 		obj:要检查的对象
 * 		cn:要检查class值
 * 如果对象中具有该class则返回true,否则返回false
 */
function hasClass(obj, cn) {

	//检查obj中是否与b2这个class
	//var reg = /\bb2\b/;
	var reg = new RegExp("\\b" + cn + "\\b");

	return reg.test(obj.className);

}

/*
 * 删除一个元素中的class
 */
function removeClass(obj, cn) {

	//创建一个正则表达式
	var reg = new RegExp("\\b" + cn + "\\b");

	//将class属性中符合正则表达式的内容,替换为空串
	obj.className = obj.className.replace(reg, "");

}

/*
 * 切换一个元素的class属性值
 * 	如果有,则删除
 * 	如果没有,则添加
 */
function toggleClass(obj, cn) {
	//判断obj中是否有cn
	if(hasClass(obj, cn)) {
		//如果有,则删除
		removeClass(obj, cn);
	} else {
		//如果没有,则添加
		addClass(obj, cn);
	}
}

轮播图html文件及,js文件,及css;综合到html文件中;

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style type="text/css">
			*{
				margin: 0 ;
				padding: 0;
			}/* 整体居中 */
			#outer{
				width: 520px;
				height: 333px;
				margin: 50px auto;
				background-color: aquamarine;
				padding: 20px 0;
				position: relative;
				overflow: hidden;
			}/* 播放幕的样式 */
			#imgList{
				list-style: none;
				float: left;
				position: absolute;	
			}/* 图片所在div的大小(js代码根据图片数量自动调整)及样式 */
			#imgList li{
				float: left;
				margin: 0 10px;
			}
			#navDiv{
				position: absolute;
				bottom: 25px;
				left: 197.5px;
			}/* 导航超链接的样式(js代码根据数量自动居中) */
			#navDiv a{
				width: 15px;
				height: 15px;
				float: left;
				margin:0 5px;
				background-color: #FF0000;
				opacity: 0.5;
			}
			#navDiv a:hover{
				background-color: #000000;
			}
		</style>
		<script type="text/javascript" src="tools.js"></script>
			
		
		<script type="text/javascript">
			window.onload=function(){
				//获取imglist
				var imgList=document.getElementById("imgList");
				//获取所有的照片元素
				var imgArr=document.getElementsByTagName("img");
				//设置imglist的宽度
				imgList.style.width=520*imgArr.length+"px";//设置大div的动态宽度
				//获取navDiv对象
				var navDiv=document.getElementById("navDiv");
				//获取outer对象
				var outer=document.getElementById("outer");
				navDiv.style.left=(outer.offsetWidth-navDiv.offsetWidth)/2+"px";//设置导航方块动态居中
				
				//默认显示索引
				var index=0;
				
				//获取所有的a对象(导航效果)
				var allA=document.getElementsByTagName("a");
				//设置默认选中效果
				allA[index].style.backgroundColor="black";
				
				
				//点击超链接切换到制定图片
				for(var i=0;i<allA.length;i++){
					allA[i].index=i;
					allA[i].onclick=function(){
						
						//点击事件会关闭自动播放定时器(前提是定时器要有名字(var))
						clearInterval(timer);//点击事件触发动画效果(左右回滚)
						
						index=this.index;
						// imgList.style.left=index*-520+"px";
						move(imgList,"left",-520*index,10,function(){
							autoChange();//鼠标点击事件动画效果执行完毕后,重新开启定时器的方法;
						});//添加动画函数,动画对象,
						   //偏移对象,偏移量,偏移速度,自定义函数
						
						setA();
						/* for(var i=0;i<allA.length;i++){
							allA[i].style.backgroundColor="red";
						}//循环清除原有的黑,增加新来的黑,提出为一个函数方便以后调用
						allA[index].style.backgroundColor="black"; */
					}
				}
				
				function setA(){
					for(var i=0;i<allA.length;i++){
						//判断当前索引的图片是否为最后一张图片
						if(index>=imgArr.length-1){
							index=0;//判断当走到最后一张图片的时候,让下标从0重新开始在走一遍(重点)
							imgList.style.left=0; //并且重新走需要向左跑,回到开头,我们把向左跑的偏移量设置为0,(重点)
							                      //就会实现一瞬间从头开始,肉眼看不出来(重点)
						}
						
						
						allA[i].style.backgroundColor="";//此处不能设置为红色,引内内联样式优先级高,
						                                  //会覆盖外联样式(hover,背景颜色),
														  //应设置为空,这样外联样式就会生效
					}//循环清除原有的黑,增加新来的黑
					allA[index].style.backgroundColor="black"; 
				}
				
				
				//创建定时器(有命名才能用命名关闭定时器)
				var timer;
				//调用自动切换函数(使其页面加载完成后直接自动运行)
				autoChange();
				//创建函数自动切换图片
				function autoChange(){
					//开启定时器,定时切换图片
					timer =setInterval(function(){//给定时器编辑内容
						//索引自增
						index++;
						if(index==imgArr.length){
							index=0;
						}
						move(imgList,"left",-520*index,20,function(){
							setA();
						});
					},2000);
				}
			};
		</script>
		<title></title>
	</head>
	<body>
		<div id="outer">
			<ul id="imgList">
				<li><img src="img/1.jpg" ></li>
				<li><img src="img/2.jpg" ></li>
				<li><img src="img/3.jpg" ></li>
				<li><img src="img/4.jpg" ></li>
				<li><img src="img/5.jpg" ></li>
				<li><img src="img/1.jpg" ></li>
			</ul>
			<div id="navDiv">
				<a href="javascript:;"></a>
				<a href="javascript:;"></a>
				<a href="javascript:;"></a>
				<a href="javascript:;"></a>
				<a href="javascript:;"></a>
			</div>
		</div>
		
	</body>
</html>

2020年7月12日

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值