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()一章节。

回复

我来回复
  • 暂无回复内容