js鼠标悬浮链接背景动画方式渐变效果
本章节分享一段代码实例,它实现了鼠标悬浮于链接能够实现动画方式背景变色。
这样的效果比起来生硬的背景变化相当美观也人性化。
代码实例如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.pipipi.net/" /> <title>前端教程网</title> <style> body,ul,h2,p{ margin:0; padding:0; font-family:"微软雅黑"; background:#333; } li{list-style:none;} a{text-decoration:none;} #box{ width:270px; padding:10px 10px 20px; overflow:hidden; margin:20px auto 0; border:1px solid #FFF; } .internal{ width:266px; float:left; } #box h2{ height:38px; border-bottom:1px solid #ccc; padding-left:5px; } #box h2 strong{ float:left; line-height:38px; color:#885050; } #box h2 a{ float:right; width:52px; height:14px; font-size:12px; text-indent:20px; color:#fff; line-height:12px; font-weight:normal; margin-top:10px; } #box li{ height:30px; position:relative; border-bottom:1px dashed #ccc; } #box li div,#box li p{ height:30px; position:absolute; top:0; left:0; width:100%; } #box li p{ background:#fff; opacity:0; filter:alpha(opacity=0); } #box li div a,#box li div span{ line-height:30px; font-size:12px; height:30px; } #box li div a { float:left; padding-left:5px; color:#7F5454; width:185px; overflow:hidden; } #box li div span{ padding-right:10px; float:right; color:#CF9494; } </style> <script type="text/javascript"> window.onload=function(){ var d=document; var oBox=d.getElementById('box'); var aLi=oBox.getElementsByTagName('li'); var index=0; for(index=0;index<aLi.length;index++){ var oP=aLi[index].getElementsByTagName('p')[0]; oP.iAlpha=0; oP.times=null; aLi[index].onmouseover=function(){ oP=this.getElementsByTagName('p')[0]; oP.times && clearInterval(oP.times); oP.style.opacity=1; oP.style.filter="alpha(opacity=100)"; oP.iAlpha=100; }; aLi[index].onmouseout=function(){ startMove(this.getElementsByTagName('p')[0]) }; } }; function startMove(obj){ obj.times=setInterval(function(){ doMove(obj); },10); } function doMove(obj){ var iSpeed=5; if(obj.iAlpha<=iSpeed){ clearInterval(obj.times); obj.iAlpha=0; obj.time=null; }else{ obj.iAlpha-=iSpeed; } obj.style.filter="alpha(opacity="+obj.iAlpha+")"; obj.style.opacity=obj.iAlpha/100; } </script> </head> <body> <div id="box"> <div class="internal"> <h2> <strong>前端教程网欢迎您</strong> <a href="http://www.pipipi.net/">more</a> </h2> <ul> <li> <p></p> <div> <a href="http://www.pipipi.net/">分享和互助是良好的学习风格</a> <span>2011-09-10</span> </div> </li> <li> <p></p> <div> <a href="http://www.pipipi.net/">每一天都是新的必须要好好珍惜</a> <span>2011-09-10</span> </div> </li> <li> <p></p> <div> <a href="http://www.pipipi.net/">没有人一开始就是高手,必须要努力学习</a> <span>2011-09-10</span> </div> </li> <li> <p></p> <div> <a href="http://www.pipipi.net/">要想有所成就,就必须有所不同,否则只能是庸庸碌碌</a> <span>2011-09-10</span> </div> </li> <li> <p></p> <div> <a href="http://www.pipipi.net/">div css教程真的很不错</a> <span>2011-09-10</span> </div> </li> <li> <p></p> <div> <a href="http://www.pipipi.net/"> 网页电子书下载 </a> <span>2011-09-10</span> </div> </li> <li> <p></p> <div> <a href="http://www.pipipi.net/">网页特效下载专区</a> <span>2011-09-10</span> </div> </li> </ul> </div> </div> </body> </html>
上面的代码实现了我们的要求,下面介绍一下它的实现过程。
一.代码注释:
(1).window.onload=function(){},当文档内容完全加载完毕再去执行函数中的代码。
(2).var d=document,将document对象赋值给变量d。
(3).var oBox=d.getElementById('box'),获取id属性值为box的元素。
(4).var aLi=oBox.getElementsByTagName('li'),获取oBox元素对象下的所有li元素集合。
(5).var index=0,声明一个变量并赋值为0。
(6).for(index=0;index<aLi.length;index++){},遍历每一个li元素。
(7).var oP=aLi[index].getElementsByTagName('p')[0],获取当前li元素下的p元素。
(8).oP.iAlpha=0,为当前p元素对象添加一个属性,并赋值为0,它是用作和低版本IE浏览器下透明度值计算相关。
(9).oP.times=null,为当前p元素对象添加一个属性,用作定时器函数的标识。
(10).aLi[index].onmouseover=function(){
oP=this.getElementsByTagName('p')[0];
oP.times && clearInterval(oP.times);
oP.style.opacity=1;
oP.style.filter="alpha(opacity=100)";
oP.iAlpha=100;
};为当前li元素注册onmouseover事件处理函数。
oP=this.getElementsByTagName('p')[0],获取当前li下的p元素,可能有人会疑问为什么不适用上面已经获取的p元素对象,这里要重复获取一次,这是因为当for循环执行完毕后,前面的p元素对象是最后一个li元素中的p元素对象,而不是当前li中的p元素对象了。
oP.times && clearInterval(oP.times),这个代码的作用是当鼠标悬浮又迅速离开,然后又快速悬浮,第一个渐变效果还没有完成的时候,那么就停止这个渐变效果。
oP.style.opacity=1,标准浏览器下设置透明度。
oP.style.filter="alpha(opacity=100)",在低版本浏览器下设置透明度。
oP.iAlpha=100,设置为100,和低版本IE浏览器数值对应起来。
(11).aLi[index].onmouseout=function(){
startMove(this.getElementsByTagName('p')[0])
},为当前li元素注册onmouseout事件处理函数,当鼠标离开的时候执行startMove()方法,参数是当前p元素对象。
(12).function startMove(obj){
obj.times=setInterval(function(){
doMove(obj);
},10);
},开始定时器函数的执行。
(13).function doMove(obj){
var iSpeed=5;
if(obj.iAlpha<=iSpeed){
clearInterval(obj.times);
obj.iAlpha=0;
obj.time=null;
}else{
obj.iAlpha-=iSpeed;
}
obj.style.filter="alpha(opacity="+obj.iAlpha+")";
obj.style.opacity=obj.iAlpha/100;
},设置元素的透明度,非常的简单的。
二.相关阅读:
(1).getElementsByTagName()方法可以参阅document.getElementsByTagName()一章节。
(2).onmouseover事件可以参阅javascript mouseover事件一章节。
(3).clearInterval()方法可以参阅window.clearInterval()一章节。
(4).onmouseout事件可以参阅javascript mouseout事件一章节。
(5).setInterval()方法可以参阅setInterval()一章节。