IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 轮播图练习 -> 正文阅读

[JavaScript知识库]轮播图练习

轮播图.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" href="../CSS/轮播图.css">
		<!--引入js文件-->
		<script src="../轮播图.js">
		</script>
		<script src="../animate.js"></script>
	</head>
	<body>

	<div class="banner">
			<div class="wrapper">
				<!--滚动区域-->
				<ul>
					<li><a href="#"><img src="../images/1.jpg" alt=""></a></li>
					<li><a href="#"><img src="../images/2.jpg" alt=""></a></li>
					<li><a href="#"><img src="../images/3.jpg" alt=""></a></li>
					<li><a href="#"><img src="../images/4.jpg" alt=""></a></li>
					<li><a href="#"><img src="../images/5.jpg" alt=""></a></li>
				</ul>
			
				<ol class="circle">
				</ol>
				<!--左侧按钮-->
			<a href="javascript:;" class="prev">&lt;</a> 
		     <!--右侧按钮-->
			<a href="javascript:;" class="next"> &gt;</a>
			</div>
			
		</div>
				
	</body>

轮播图.css


body {
	height:4000px;
}
/* 轮播图设置 */
.banner {
	position: relative;
	/*width: 1080px;*/
	height: 424px;
}
/* 版心设置 */
.wrapper {
	position: absolute;
	width: 1080px;
	/*position: relative;*/
	height: 424px;
	margin-left: 50%;
	left:-540px;
	overflow: hidden;
	/* 背景 */
}
.wrapper ul {
	position: absolute;
	list-style: none;
	top: 0;
	left: 0;
	width: 700%;
}

.wrapper ul li {
	float: left;
}
/*.wrapper ul li img {
	width: 1080px;
	height: 480px;
}*/
/* 版心放置图片设置 */
/*.wrapper ul {
	list-style: none;
}*/
/* 左右箭头设置 */
.prev,
.next {
	display: none;
	/*margin-top: -25px;*/
	width: 30px;
	height: 40px;
	/*设置背景透明*/
	 background-color: rgba(0,0,0,0.2); 
	font-size:25px;
	color: white;
	text-align: center;
	line-height: 40px;
	text-decoration: none;
	position: absolute;/* 绝对定位 */
	top: 50%;
	margin-top: -20px;
	z-index: 2;
}
.prev {
	left: 0;
	/*left: 40px;*/
	border-top-right-radius: 20px;
	border-bottom-right-radius: 20px;
}
.next {
	right: 0;
	border-top-left-radius: 20px;
	border-bottom-left-radius: 20px;
}

/* 底部小圆点设置 */
.banner .circle {
	   list-style: none;
	 /*设置导航条的宽度和高度*/
	/* width: 200px;
	 height: 40px; */
	bottom: 15px;
	 /*设置ol的背景颜色*/
	 /* background-color: rgba(255,255,255,.2); */
	 /*绝对定位*/
	 position: absolute;
	 left: 50%;
	margin-left: -100px;
	border-radius: 20px;
}
.wrapper .circle li {
	float: left;
	/*设置每个li标签的宽高*/
	width: 20px;
	height: 20px;
	border-radius: 50%;
	background-color: rgba(2555,255,255,0.4);
	margin: 10px;
	margin-bottom: -10px;
	/*鼠标经过显示小手*/
	cursor: pointer;
}
.wrapper .circle .current {
	background-color: white;
}

轮播图.js

window.addEventListener('load',function() {
	var prev=document.querySelector('.prev');
	var next=document.querySelector('.next');
	var wrapper=document.querySelector('.wrapper');
	var wrapperWidth=wrapper.offsetWidth;
	wrapper.addEventListener('mouseenter',function(){
		prev.style.display = 'block';
		next.style.display = 'block';
		clearInterval(timer);
		timer = null;//清除定时器变量
	})
	wrapper.addEventListener('mouseleave',function(){
		prev.style.display = 'none';
		next.style.display = 'none';
		timer = setInterval(function() {
			next.click();
		},3000);  
	});
    //	动态生成小圆点 有几张图生成几个小圆点
    var ul=wrapper.querySelector('ul');
    var ol=wrapper.querySelector('.circle');
    for(var i=0;i<ul.children.length;i++){
    	//创建小li
    	//并且给li生成自定义属性来记录小圆圈的索引号
    	var li=document.createElement('li');
    	li.setAttribute('index',i);
    	//把小li插到ol里
    	ol.appendChild(li);
    	//小圆圈的排他思想,直接在生成小圆点的同时直接绑定点击事件
    	li.addEventListener('click',function() {
    		for(var i=0;i<ol.children.length;i++) {
    			//把所有的li去除current类名
    			ol.children[i].className='';
    		}
    		//为自己设置current类名
    		this.className='current';
    		//点击小圆点,移动图片  移动的是ul
    		//ul的引动距离 小圆圈的索引号 乘以图片的宽度 注意是负值
    		//当我们点击某个小li就取当前li的索引号
    		var index=this.getAttribute('index');
    		//当点击了某个小li 就要把这个小li的索引号给num
    		nun=index;
    		circle=index;
   		    animate(ul,-index*wrapperWidth);
//          animate(ul,-index*1064);
    	})
		}
    //把ol里的第一个小li设置类名为current
    ol.children[0].className = 'current';
    //克隆第一张图片放到ulzuihoumian
    var first=ul.children[0].cloneNode(true);
    ul.appendChild(first);
    //点击右侧按钮,图片滚动一张
    var num=0;
    //flag 节流阀
    var flag = true;
	//控制小圆圈的播放
	var circle=0;
   next.addEventListener('click',function() {
       if(flag) {
       	flag=false;//关闭节流阀
       	   	//如果走到了最后复制的一张图片,此时ul要快速复原 left改为0
   	if(num==ul.children.length-1) {
   		ul.style.left=0;
   		num=0;
   	}
   	num++;
   	animate(ul,-num*wrapperWidth,function() {
   		flag=true;
   	});
   	//点击右侧按钮,小圆圈跟随一起变化  可以再声明一个变量控制小圆圈的播放
   	circle++;
   	//当circle走到最后一个就重新赋值为0
   	if(circle==ol.children.length) {
   		circle=0;
   	}
// 	//先清除其他小圆圈的current类名   留下自己的current类名
// 	for(var i=0;i<ol.children.length;i++) {
// 		ol.children[i].className='';
// 	}
// 	ol.children[circle].className='current';
    circleChange();
       }
   });
   //左侧按钮功能
   prev.addEventListener('click',function() {
   	if(flag){
   		flag=false;
   	//如果走到了最后复制的一张图片,此时ul要快速复原 left改为0
   	if(num==0) {
   		num=ul.children.length-1;
   		ul.style.left=-num*wrapperWidth+'px';
   		
   	}
   	num--;
   	animate(ul,-num*wrapperWidth,function(){
   	flag=true;});
   	//点击左侧按钮,小圆圈跟随一起变化  可以再声明一个变量控制小圆圈的播放
   	circle--;
   	//当circle<0 说明是第一张图片 则小圆圈要改为最后一个小圆圈
   	if(circle<0) {
   		circle=ol.children.length-1;
   	}
   circleChange();
   }
   });
   function circleChange() {
   		//先清除其他小圆圈的current类名   留下自己的current类名
   	for(var i=0;i<ol.children.length;i++) {
   		ol.children[i].className='';
   	}
   	ol.children[circle].className='current';
   }
   //自动播放轮播图
   var timer = setInterval(function() {
   	//手动调用点击事件
   	next.click();
   },3000);
})

动画函数封装? animate.js

function animate(obj,target,callback) {
	clearInterval(obj.timer);
	obj.timer=setInterval(function () {
		var step=(target-obj.offsetLeft) / 10;
		//把步长值改为整数 如果大于0往大的取  如果小于0 往小的取
		step=step > 0 ? Math.ceil(step) : Math.floor(step);
	if(obj.offsetLeft == target) {
		//停止动画本质是停止计时器
		clearInterval(obj.timer);
		//回调函数写到定时器结束里面
//		if(callback) {
//			//调用函数
//			callback();
//		}
     callback && callback();
	}
	obj.style.left=obj.offsetLeft + step + 'px';//offsetLeft获取元素位置
},15);	
}

页面效果:

点击右侧按钮后:

?

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:32:12  更:2022-04-18 17:36:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:13:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码