汇集网上焦点轮播图的实现方式,自己试了下,不过鼠标悬浮停止动画和鼠标离开动画播放好像没生效,不太明白,最后两行代码中,为什么可以直接写stop和play。不用加括号调用函数么?求懂的大神指点!
所用知识点:
1.DOM操作
2.定时器
3.事件运用
4.Js动画
5.函数递归
6.无限滚动大法(可以用js实现一个假图的制作。不过说实话一直理解不了假图的作用原理)
<style>
* {
margin: 0;
padding: 0; } a {
text-decoration: none;
} body {
padding: 20px;
} #container {
width: 600px; /*这里600x400是图片的宽高*/
height: 400px;
border: 3px solid #333;
overflow: hidden; /*隐藏溢出的图片,因为图片左浮动,总宽度为4200*/
position: relative;
} #list {
width: 4200px; /*这里设置7张图片总宽度*/
height: 400px;
position: absolute; /*基于父容器container进行定位*/
z-index: 1;
} #list img {
float: left;
width:610px;
} #buttons {
position: absolute;
height: 10px;
width: 100px;
z-index: 2; /*按钮在图片的上面*/
bottom: 20px;
left: 250px;
} #buttons span {
cursor: pointer;
float: left;
border: 1px solid #fff;
width: 10px;
height: 10px;
border-radius: 50%;
background: #333;
margin-right: 5px;
} #buttons .on {
background: orangered; /*选中的按钮样式*/
} .arrow {
cursor: pointer;
display: none; /*左右切换按钮默认先隐藏*/
line-height: 39px;
text-align: center;
font-size: 36px;
font-weight: bold;
width: 40px;
height: 40px;
position: absolute;
z-index: 2;
top: 180px;
background-color: RGBA(0, 0, 0, .3);
color: #fff;
} .arrow:hover {
background-color: RGBA(0, 0, 0, .7);
} #container:hover .arrow {
display: block; /*当鼠标放上去容器上面就显示左右切换按钮*/
} #prev {
left: 20px;
} #next {
right: 20px;
}
</style>
<div id="container">
<div id="list" style="left: -600px;">
<img src="5.jpg" alt="1"/>
<img src="1.jpg" alt="1"/>
<img src="2.jpg" alt="2"/>
<img src="3.jpg" alt="3"/>
<img src="4.jpg" alt="4"/>
<img src="5.jpg" alt="5"/>
<img src="1.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:void(0);" id="prev" class="arrow"><</a>
<a href="javascript:void(0);" id="next" class="arrow">></a></div>
<script>
window.onload = function(){
var container=document.getElementById('container');
var list=document.getElementById('list');
var buttons=document.getElementById('buttons').getElementsByTagName('span');
var next=document.getElementById('next');
var prev=document.getElementById('prev');
var index=1; var len=5;//图片的数量
var animated=false;//用于判断切换是否进行
var interval=3000; //自动播放定时器的秒数,3秒
var timer; //定时器
// 切换动画
function animate(offset){
animated=true; //切换进行中
var time=300; //位移总时间
var inteval=10; //位移间隔时间
var speed=offset/(time/inteval); //每次位移量
var newLeft=parseInt(list.style.left)+offset;
var go=function(){
if((speed<0&&parseInt(list.style.left)>newLeft)||(speed>0&&parseInt(list.style.left)>newLeft)){
list.style.left=parseInt(list.style.left)+speed+'px';
setTimeout(go,inteval);
}else{
animated=false;
list.style.left=newLeft+'px';
if(newLeft<-3000){
list.style.left=-600+'px';
}
if(newLeft>-600){
list.style.left=-3000+'px';
}
}
}
go();
/*var newLeft=parseInt(list.style.left)+offset;
list.style.left=newLeft+'px';
if(newLeft<-3000){
list.style.left=-600+'px';
}
if(newLeft>-600){
list.style.left=-3000+'px';
}*/
} // 为按钮添加样式
function showButton(){
for(var i=0;i<buttons.length;i++){
if(buttons[i].className=='on'){
buttons[i].className='';
break;
}
}
buttons[index-1].className='on';
}
next.onclick=function(){
if(animated){
return;
}
if(index==5){
index=1;
}else{
index+=1;
}
animate(-600);
showButton();
} prev.onclick=function(){
if(animated){
return;
}
if(index==1){
index=5;
}else{
index-=1;
}
animate(600);
showButton();
} // 通过循环为按钮添加点击事件
for(var i=0;i<buttons.length;i++){
buttons[i].onclick=function(){
if(animated){
return;
}
// 当继续点击当前按钮的时候,不进行切换
if(this.className == 'on'){
return;
}
// 通过获取按钮标签的自定义属性Index 得到索引值,再计算差值
var myIndex = parseInt(this.getAttribute('index'));
//真正的偏移量
var offset = -600*(myIndex-index);
animate(offset);
index=myIndex;
showButton();
}
// 自动播放
function play(){
timer=setTimeout(function(){
next.onclick();
play();
},interval)
}
function stop(){
clearTimeout(timer);
}
container.onmouseover=stop;
container.onmouseout=play; play();
}
}
</script>
<script>
window.onload = function(){
var container=document.getElementById('container');
var list=document.getElementById('list');
var buttons=document.getElementById('buttons').getElementsByTagName('span');
var next=document.getElementById('next');
var prev=document.getElementById('prev');
var index=; var len=;//图片的数量
var animated=false;//用于判断切换是否进行
var interval=; //自动播放定时器的秒数,3秒
var timer; //定时器
// 切换动画
function animate(offset){
animated=true; //切换进行中
var time=; //位移总时间
var inteval=; //位移间隔时间
var speed=offset/(time/inteval); //每次位移量
var newLeft=parseInt(list.style.left)+offset;
var go=function(){
if((speed<&&parseInt(list.style.left)>newLeft)||(speed>&&parseInt(list.style.left)>newLeft)){
list.style.left=parseInt(list.style.left)+speed+'px';
setTimeout(go,inteval);
}else{
animated=false;
list.style.left=newLeft+'px';
if(newLeft<-){
list.style.left=-+'px';
}
if(newLeft>-){
list.style.left=-+'px';
}
}
}
go();
/*var newLeft=parseInt(list.style.left)+offset;
list.style.left=newLeft+'px';
if(newLeft<-3000){
list.style.left=-600+'px';
}
if(newLeft>-600){
list.style.left=-3000+'px';
}*/
} // 为按钮添加样式
function showButton(){
for(var i=;i<buttons.length;i++){
if(buttons[i].className=='on'){
buttons[i].className='';
break;
}
}
buttons[index-].className='on';
}
next.onclick=function(){
if(animated){
return;
}
if(index==){
index=;
}else{
index+=;
}
animate(-);
showButton();
} prev.onclick=function(){
if(animated){
return;
}
if(index==){
index=;
}else{
index-=;
}
animate();
showButton();
} // 通过循环为按钮添加点击事件
for(var i=;i<buttons.length;i++){
buttons[i].onclick=function(){
if(animated){
return;
}
// 当继续点击当前按钮的时候,不进行切换
if(this.className == 'on'){
return;
}
// 通过获取按钮标签的自定义属性Index 得到索引值,再计算差值
var myIndex = parseInt(this.getAttribute('index'));
//真正的偏移量
var offset = -*(myIndex-index);
animate(offset);
index=myIndex;
showButton();
}
// 自动播放
function play(){
timer=setTimeout(function(){
next.onclick();
play();
},interval)
}
function stop(){
clearTimeout(timer);
}
container.onmouseover=stop;
container.onmouseout=play; play();
}
}
</script>