复制下面的代码查看神奇的效果(有趣的特效轮播图)
html部分
<div id="outer">
<ul id="imgList">
<li><img src="img/1.jpg" alt=""></li>
<li><img src="img/2.jpg" alt=""></li>
<li><img src="img/3.jpg" alt=""></li>
<li><img src="img/4.jpg" alt=""></li>
<li><img src="img/5.jpg" alt=""></li>
<li><img src="img/1.jpg" alt=""></li>
</ul>
<div id="nav">
<a href="" class="current"></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
</div>
<div id="span">
<span class="left" id="left"><</span>
<span class="right" id="right">></span>
</div>
</div>
css部分
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#outer{
width: 500px;
height: 200px;
overflow: hidden;
margin: 100px auto;
position: relative;
}
#outer #imgList{
list-style: none;
position: absolute;
left: 0;
top: 0;
}
div#outer #imgList li{
float: left;
}
#imgList li>img{
width: 500px;
height: 200px;
}
div#nav{
width: 170px;
height: 30px;
position: absolute;
bottom: 5px;
}
#nav a{
display: inline-block;
margin: 5px;
border: 1px solid #FF0000;
width: 15px;
height: 15px;
background: #FF0000;
}
#nav a.current{
background: #FFA500;
}
div#span{
display: none;
}
span{
position: absolute;
top: 50%;
margin-top:-20px;
font-size: 25px;
display: block;
width: 30px;
height: 35px;
line-height: 35px;
background: #CCCCCC;
text-align: center;
cursor: pointer;
}
#span .right{
right:0;
}
</style>
js部分
<script type="text/javascript">
function mFun$(id){
return document.getElementById(id);
}
//获取outer
var box=mFun$('outer');
//获取相框宽度
var imgWidth=box.offsetWidth;
//获取ul
var ul=box.children[0];
//获取所有的img
var images=document.getElementsByTagName('img');
//给ul设置宽度
ul.style.width=500*images.length+'px';
//获取导航
var nav=mFun$('nav');
var width=nav.offsetWidth;
//导航居中
nav.style.left=(imgWidth-width)/2+'px';
var span=mFun$('span');
//获取所有的a标签
var aAll=document.getElementsByTagName('a');
for(var i=0;i<aAll.length;i++){
aAll[i].num=i;
aAll[i].οnmοuseοver=function(){
index=this.num;
animate(ul,-index*imgWidth);
//排它事件
for(var j=0;j<aAll.length;j++){
aAll[j].removeAttribute('class');
}
this.className='current';
}
}
//设置任意的一个元素,移动到指定的目标位置
function animate(element, target,callback) {
clearInterval(element.timeId);
//定时器的id值存储到对象的一个属性中
element.timeId = setInterval(function () {
//获取元素的当前的位置,数字类型
var current = element.offsetLeft;
//每次移动的距离
var step = 10;
step = current < target ? step : -step;
//当前移动到位置
current += step;
if (Math.abs(current - target) > Math.abs(step)) {
element.style.left = current + "px";
} else {
//清理定时器
clearInterval(element.timeId);
//直接到达目标
element.style.left = target + "px";
callback && callback()
}
}, 30);
}
//自动播放
var timer=setInterval(f1,3000);
//移入移出
box.οnmοuseοver=function(){
span.style.display='block';
clearInterval(timer);
}
box.οnmοuseοut=function(){
span.style.display='none';
timer=setInterval(f1,1000);
}
//右边按钮
var index=0;
var flag=true; //节流阀
mFun$('right').οnclick=f1;
function f1(){
if(flag){
flag=false;
if(index==images.length-1){
index=0;
ul.style.left=0;
}
index++;
animate(ul,-index*imgWidth,function(){
flag=true;
});
if(index==images.length-1){
//删除第5个按钮的背景颜色
aAll[aAll.length-1].removeAttribute('class');
aAll[0].className='current';
}else{
//去除所以的颜色
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
}
if(index==images.length-1){
index=0;
ul.style.left=0;
}
index++;
animate(ul,-index*imgWidth);
if(index==images.length-1){
//删除第5个按钮的背景颜色
aAll[aAll.length-1].removeAttribute('class');
aAll[0].className='current';
}else{
//去除所以的颜色
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
}
//左边按钮
mFun$('left').οnclick=function(){
if(flag){
flag=false;
if(index==0){
index=5;
ul.style.left=-index*imgWidth+'px';
}
index--;
animate(ul,-index*imgWidth,function(){
flag=true;
});
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
if(index==0){
index=5;
ul.style.left=-index*imgWidth+'px';
}
index--;
animate(ul,-index*imgWidth);
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
</script>
完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#outer{
width: 500px;
height: 200px;
overflow: hidden;
margin: 100px auto;
position: relative;
}
#outer #imgList{
list-style: none;
position: absolute;
left: 0;
top: 0;
}
div#outer #imgList li{
float: left;
}
#imgList li>img{
width: 500px;
height: 200px;
}
div#nav{
width: 170px;
height: 30px;
position: absolute;
bottom: 5px;
}
#nav a{
display: inline-block;
margin: 5px;
border: 1px solid #FF0000;
width: 15px;
height: 15px;
background: #FF0000;
}
#nav a.current{
background: #FFA500;
}
div#span{
display: none;
}
span{
position: absolute;
top: 50%;
margin-top:-20px;
font-size: 25px;
display: block;
width: 30px;
height: 35px;
line-height: 35px;
background: #CCCCCC;
text-align: center;
cursor: pointer;
}
#span .right{
right:0;
}
</style>
</head>
<body>
<div id="outer">
<ul id="imgList">
<li><img src="img/1.jpg" alt=""></li>
<li><img src="img/2.jpg" alt=""></li>
<li><img src="img/3.jpg" alt=""></li>
<li><img src="img/4.jpg" alt=""></li>
<li><img src="img/5.jpg" alt=""></li>
<li><img src="img/1.jpg" alt=""></li>
</ul>
<div id="nav">
<a href="" class="current"></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
<a href=""></a>
</div>
<div id="span">
<span class="left" id="left"><</span>
<span class="right" id="right">></span>
</div>
</div>
<script type="text/javascript">
function mFun$(id){
return document.getElementById(id);
}
//获取outer
var box=mFun$('outer');
//获取相框宽度
var imgWidth=box.offsetWidth;
//获取ul
var ul=box.children[0];
//获取所有的img
var images=document.getElementsByTagName('img');
//给ul设置宽度
ul.style.width=500*images.length+'px';
//获取导航
var nav=mFun$('nav');
var width=nav.offsetWidth;
//导航居中
nav.style.left=(imgWidth-width)/2+'px';
var span=mFun$('span');
//获取所有的a标签
var aAll=document.getElementsByTagName('a');
for(var i=0;i<aAll.length;i++){
aAll[i].num=i;
aAll[i].οnmοuseοver=function(){
index=this.num;
animate(ul,-index*imgWidth);
//排它事件
for(var j=0;j<aAll.length;j++){
aAll[j].removeAttribute('class');
}
this.className='current';
}
}
//设置任意的一个元素,移动到指定的目标位置
function animate(element, target,callback) {
clearInterval(element.timeId);
//定时器的id值存储到对象的一个属性中
element.timeId = setInterval(function () {
//获取元素的当前的位置,数字类型
var current = element.offsetLeft;
//每次移动的距离
var step = 10;
step = current < target ? step : -step;
//当前移动到位置
current += step;
if (Math.abs(current - target) > Math.abs(step)) {
element.style.left = current + "px";
} else {
//清理定时器
clearInterval(element.timeId);
//直接到达目标
element.style.left = target + "px";
callback && callback()
}
}, 30);
}
//自动播放
var timer=setInterval(f1,3000);
//移入移出
box.οnmοuseοver=function(){
span.style.display='block';
clearInterval(timer);
}
box.οnmοuseοut=function(){
span.style.display='none';
timer=setInterval(f1,1000);
}
//右边按钮
var index=0;
var flag=true; //节流阀
mFun$('right').οnclick=f1;
function f1(){
if(flag){
flag=false;
if(index==images.length-1){
index=0;
ul.style.left=0;
}
index++;
animate(ul,-index*imgWidth,function(){
flag=true;
});
if(index==images.length-1){
//删除第5个按钮的背景颜色
aAll[aAll.length-1].removeAttribute('class');
aAll[0].className='current';
}else{
//去除所以的颜色
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
}
if(index==images.length-1){
index=0;
ul.style.left=0;
}
index++;
animate(ul,-index*imgWidth);
if(index==images.length-1){
//删除第5个按钮的背景颜色
aAll[aAll.length-1].removeAttribute('class');
aAll[0].className='current';
}else{
//去除所以的颜色
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
}
//左边按钮
mFun$('left').οnclick=function(){
if(flag){
flag=false;
if(index==0){
index=5;
ul.style.left=-index*imgWidth+'px';
}
index--;
animate(ul,-index*imgWidth,function(){
flag=true;
});
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
if(index==0){
index=5;
ul.style.left=-index*imgWidth+'px';
}
index--;
animate(ul,-index*imgWidth);
for(var i=0;i<aAll.length;i++){
aAll[i].removeAttribute('class');
}
aAll[index].className='current';
}
</script>
</body>
</html>