轮播
js轮播
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {margin: 0;padding: 0;text-decoration: none;}
body {padding: 20px;}
#container {position: relative;width: 600px;height: 400px;border: 3px solid #333;
overflow: hidden;}
#list {position: absolute;z-index: 1;width: 4200px;height: 400px;}
#list img {float: left;width: 600px;height: 400px;}
#buttons {position: absolute;left: 250px;bottom: 20px;z-index: 2;height: 10px;width: 100px;}
#buttons span {float: left;margin-right: 5px;width: 10px;height: 10px;border: 1px solid #fff;
border-radius: 50%;background: #333;cursor: pointer;}
#buttons .on {background: orangered;}
.arrow {position: absolute;top: 180px;z-index: 2;display: none;width: 40px;height: 40px;
font-size: 36px;font-weight: bold;line-height: 39px;text-align: center;color: #fff;
background-color: RGBA(0, 0, 0, .3);cursor: pointer;}
.arrow:hover {background-color: RGBA(0, 0, 0, .7);}
#container:hover .arrow {display: block;}
#prev {left: 20px;}
#next {right: 20px;}
</style>
<script type="text/javascript">
/* 知识点: */
/* this用法 */
/* DOM事件 */
/* 定时器 */
window.onload = function() {
var container = document.getElementById('container');
var list = document.getElementById('list');
var buttons = document.getElementById('buttons').getElementsByTagName('span');
var prev = document.getElementById('prev');
var next = document.getElementById('next');
var index = 1;
var timer;
function animate(offset) {
//获取的是style.left,是相对左边获取距离,所以第一张图后style.left都为负值,
//且style.left获取的是字符串,需要用parseInt()取整转化为数字。
var newLeft = parseInt(list.style.left) + offset;
list.style.left = newLeft + 'px';
//无限滚动判断
if (newLeft > -600) {
list.style.left = -3000 + 'px';
}
if (newLeft < -3000) {
list.style.left = -600 + 'px';
}
}
function play() {
//重复执行的定时器
timer = setInterval(function() {
next.onclick();
}, 2000)
}
function stop() {
clearInterval(timer);
}
function buttonsShow() {
//将之前的小圆点的样式清除
for (var i = 0; i < buttons.length; i++) {
if (buttons[i].className === "on") {
buttons[i].className = "";
}
}
//数组从0开始,故index需要-1
buttons[index - 1].className = "on";
}
prev.onclick = function() {
index -= 1;
if (index < 1) {
index = 5
}
buttonsShow();
animate(600);
};
next.onclick = function() {
//由于上边定时器的作用,index会一直递增下去,我们只有5个小圆点,所以需要做出判断
index += 1;
if (index > 5) {
index = 1
}
animate(-600);
buttonsShow();
};
for (var i = 0; i < buttons.length; i++) {
(function(i) {
buttons[i].onclick = function() {
/* 这里获得鼠标移动到小圆点的位置,用this把index绑定到对象buttons[i]上,去谷歌this的用法 */
/* 由于这里的index是自定义属性,需要用到getAttribute()这个DOM2级方法,去获取自定义index的属性*/
var clickIndex = parseInt(this.getAttribute('index'));
var offset = 600 * (index - clickIndex); //这个index是当前图片停留时的index
animate(offset);
index = clickIndex; //存放鼠标点击后的位置,用于小圆点的正常显示
buttonsShow();
}
})(i)
}
container.onmouseover = stop;
container.onmouseout = play;
play();
}
</script>
</head>
<body>
<div id="container">
<div id="list" style="left: -600px;">
<img src="img/1.jpg" alt="0" />
<img src="img/1.jpg" alt="1" />
<img src="img/2.jpg" alt="2" />
<img src="img/3.jpg" alt="3" />
<img src="img/4.jpg" alt="4" />
<img src="img/5.jpg" alt="5" />
</div>
<div id="buttons">
<span index="1" class="on"></span>
<span index="2"></span>
<span index="3"></span>
<span index="4"></span>
<span index="5"></span>
</div>
<a href="javascript:;" id="prev" class="arrow"><</a>
<a href="javascript:;" id="next" class="arrow">></a>
</div>
</body>
</html>
jq轮播
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
ul{list-style: none;position: absolute;bottom: 76px;left: 95px;}
ul li{float: left;}
ul li a{display: block;width: 20px;height: 20px;border-radius: 50%;background-color: #ffbeaa;
margin-left: 5px;opacity: 0.6;text-decoration: none;text-align: center;}
ul li a.active{background-color: red;}
.inner{width: 2000px;height: 400px;}
.inner img{display: block;float: left;}
.pic{width: 400px;overflow: hidden;position: relative;}
.prev,.next{position: absolute;top: 120px;opacity: 0.6;}
.next{right: 0;}
</style>
<script src="js/jquery.js"></script>
</head>
<body>
<div class="pic">
<div class="inner">
<img src="img/1.jpg" alt=""> <!--宽400,高266-->
<img src="img/2.jpg" alt="">
<img src="img/3.jpg" alt="">
<img src="img/4.jpg" alt="">
<img src="img/5.jpg" alt="">
</div>
<ul>
<li><a href="#" class="active">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
</ul>
<a href="#" class="prev"><img src="img/prev.png" alt=""></a>
<a href="#" class="next"><img src="img/next.png" alt=""></a>
</div>
<script>
var num=0;
var timer=null;
var timeout=null;
// 设置鼠标悬浮在按钮切换事件
$("ul li a").mouseenter(function(event){
//设置定时器前应先判断有没有定时器,有就清除
if(timeout){
clearTimeout(timeout);
timeout=null;
}
num=$(this).parent().index();
//设置悬浮时500毫秒时切换,不足500毫秒时不会切换
timeout=setTimeout(changgeMg,500);
return false;
});
//悬浮在窗口时停止轮播
$(".pic").mouseenter(function(){
//清除定时器
clearInterval(timer);
});
//鼠标移除窗口时开始轮播
$(".pic").mouseleave(function(){
//设置一个3秒的自动轮播定时器
timer=setInterval(changeTab,3000);
})
//点击next切换
$(".next").click(function(){
//设置定时器前应先判断有没有定时器,有就清除
if(timeout){
clearTimeout(timeout);
timeout=null;
}
if(num<4){
num++;
}else{
num=0;
}
//设置点击后500毫秒去切换,如果点击间隔小于500毫秒不停点击则不会切换
timeout=setTimeout(changgeMg,500);
//不让a元素去默认跳转
return false;
});
//点击prev切换
$(".prev").click(function(){
if(timeout){
clearTimeout(timeout);
timeout=null;
}
if(num>0){
num--;
}else{
num=4;
}
//设置点击后500毫秒去切换,如果点击间隔小于500毫秒不停点击则不会切换
timeout=setTimeout(changgeMg,500);
return false;
});
//轮播定时器
timer=setInterval(changeTab,1000);
//移动盒子和给当前索引上色
function changgeMg(){
var movePx=num*-400+"px";
$(".inner").animate({"marginLeft":movePx},500);
$("ul li").eq(num).find("a").addClass("active").parent().siblings().find("a").removeClass("active");
}
//定时器函数
function changeTab(){
if (num<4){
num++;
}else{
num=0;
}
changgeMg();
}
</script>
<!--
<script>
//1.页数切换
$("ul li a").click(function () {
var num=$(this).parent().index(); //获取a元素的父级元素li的索引值存进变量num 可能的值分别为0,1,2,3,4
var movePx=num * -400 + 'px'; //根据索引值计算出应该移动的距离,存进变量movePx
/* $('.inner').css('margin-left',movePx); //给.inner盒子添加边距*/
$('.inner').animate({'margin-left':movePx},500); //给.inner盒子添加边距,并需要有个时间去过渡平移,,用.animate()事件,500毫秒为动作的时间
$('ul li').eq(num).find('a').addClass('active').parent() //根据索引的值找到相应的a元素,并且添加一个红色背景,同时移除其他a元素的红色背景
.siblings().find('a').removeClass('active');
}) ;
//2.按钮切换
var num=0;
//next
$('.next').click(function () {
//如果点击一次next
if (num<4){
num++;
} else {
num=0;
}
var movePx=num * -400 + 'px';
$('.inner').animate({'margin-left':movePx},500);
$('ul li').eq(num).find('a').addClass('active').parent()
.siblings().find('a').removeClass('active');
return false;
});
//prev
$('.prev').click(function () {
//如果点击一次prev
if (num>0){
num--;;
} else {
num=4;
}
var movePx=num * -400 + 'px';
$('.inner').animate({'margin-left':movePx},500);
$('ul li').eq(num).find('a').addClass('active').parent()
.siblings().find('a').removeClass('active');
return false;
});
//3.自动轮播
//定时器函数
function changeTab(){
if (num<4){
num++;
}else{
num=0;
}
var movePx=num * -400 + "px";
$(".inner").animate({"marginLeft":movePx},500);
$("ul li").eq(num).find("a").addClass("active").parent().siblings().find("a").removeClass("active");
}
//4.当悬浮在.pic盒子上时轮播停止,移出.pic盒子时轮播开始
//轮播定时器,3秒执行一次
timer=setInterval(changeTab,3000);
//悬浮在窗口时停止轮播
$(".pic").mouseenter(function(){
clearInterval(timer);
});
//鼠标移除窗口时开始轮播
$(".pic").mouseleave(function(){
timer=setInterval(changeTab,3000);
})
</script>-->
</body>
</html>
效果图: