[JavaScript学习]幻灯片效果

近期在学习JavaScript,这算是一个基础效果实现的小练习吧,把想法和实现方法记录在这里,作为学习笔记吧。


目标:实现图片渐隐渐显切换的幻灯片效果。

想法

  1. 图片切换通过改变图片url来实现;
  2. 渐隐渐显效果通过定时改变图片透明度来实现,整个过程为:图片透明度定时降低为0->更改图片url->图片透明度定时增加到100;
  3. 通过列表按钮对应图片,当鼠标指向不同的列表按钮,图片进行切换;
  4. 图片定时自动切换;
  5. 当鼠标在图片区域时,停止自动切换;

实现

HTML:

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html;charset=utf-8">
	<link href="opacity.css" rel="stylesheet" type="text/css" />
	<script type="text/javascript" src="opacity.js" ></script>
</head>
<body>
<div id="box">
	<img id="curImg" src="img/1.jpg" />
	<ul id="button">
		<li >1</li>
		<li >2</li>
		<li >3</li>
		<li >4</li>
		<li >5</li>
	</ul>
</div>
</body>

</html>

CSS:

@charset "UTF-8"
*{
	border: 0;
	padding: 0;
	margin: 0;
	text-decoration: none;;
}

div{
	width:470px;
	height: 150px;
	margin: 0 auto;
	position: relative;
	border: 1px solid;
}

img{
	position: absolute;
	filter:alpha(opacity=100);
	z-index: -1;
	opacity: 1;
	display: none;
}

#curImg{
	display:block;
}

ul{
	padding: 112px 0 0 340px;
}

li{
	width: 16px;
	height: 16px;
	margin-right: 10px;
	float: left;
	list-style-type: none;
	background:#ccc;
	text-align: center;
	line-height: 16px;
	font-size: 12px;
	color: gray;
}

JavaScript:

window.onload = function(){

var oImg = document.getElementById('curImg');
var oLi = document.getElementsByTagName('li');
var oDiv = document.getElementById('box');
var timer = null;
var tabTimer = null;
var alpha = null;
var now = 0;

	//给每个list按钮加个索引值
	for(var j = 0; j < oLi.length; j++ ){
		oLi[j].index = j;
	}
	//打开网页时,默认第一个按钮高亮
	oLi[0].style.background = "white";

	//给每个list按钮加上onmouseover事件
	for(var i = 0; i < oLi.length; i++){
		oLi[i].οnmοuseοver= function(){
			//检测当前图片是否对应当前list按钮,如果是的话直接返回,否则进行图片切换
			if(now == this.index){
				return;
			}
			now = this.index;
			changeImage();
		}
	}

	//幻灯片自动换页
	clearInterval(tabTimer);
	tabTimer = setInterval(tab, 3000);

	//当鼠标悬停到图片上时停止自动换页
	box.onmouseover = function(){
		clearInterval(tabTimer);
	}

	//鼠标离开图片区域,重新开启自动换页
	box.onmouseout = function(){
		tabTimer = setInterval(tab,3000);
	}


//获取传入对象元素的当前属性值
function getStyle(obj, attr){
	if(obj.currentStyle){
		return obj.currentStyle[attr];
	}else{
		return getComputedStyle(obj, false)[attr];
	}
}

//改变对象元素的透明度,可以控制透明度的程度和变化速度
function changeOpacity(obj, iTarget, speed){
	alpha = getStyle(obj, "opacity")*100;
	if (Math.abs(alpha - iTarget) < Math.abs(speed)){
		alpha = iTarget;
	}else{
		alpha += speed;
	}
	obj.style.fileter = "alpha(opacity="+alpha+")";
	obj.style.opacity = alpha/100;
}

//实现幻灯片自动换页效果
function tab(){
	if (now == 4) {
		now = 0;
	}else{
		now++;
	}
	changeImage();
}

//使图像透明度渐变为0,然后更换图片,再把透明度渐变为1
function changeImage(){
	for (var j = 0; j < oLi.length; j++) {
		oLi[j].style.background = "#ccc";
	}
	oLi[now].style.background = "white";
	clearInterval(timer);
	timer = setInterval(function(){
		changeOpacity(oImg, 0, -10);
		alpha = getStyle(oImg, "opacity");
		if(alpha == 0){
			clearInterval(timer);
			oImg.src = "img/"+(now+1)+".jpg";
			timer = setInterval(function(){
				changeOpacity(oImg, 100, 10);
				alpha = getStyle(oImg, "opacity");
				if(alpha == 100){
					clearInterval(timer);
				}
			},30);
		}
	}, 30);
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值