【问题标题】:Animating background color, pulse effect动画背景颜色,脉冲效果
【发布时间】:2015-03-20 17:07:15
【问题描述】:

我制作了一个脚本,用于在将鼠标悬停在其中的 a 元素上后为菜单 li 元素设置动画。

一切正常,但我想要别的东西。只要鼠标悬停在 a 元素上,我希望效果不会消失,而是一直存在。

使用什么功能?

到目前为止的脚本:

 jQuery(document).ready(function($){
        $(".main-navigation a").mouseover(function() {
        $(this).parent().animate({
    backgroundColor: "green"
    }, "normal"),
    $(this).parent().animate({
    backgroundColor: "transparent"
    })
    .mouseleave(function() {
    $(this).parent().animate({
    backgroundColor: "transparent"
    }, "normal")
    });
    });
});

http://jsfiddle.net/neugu8r9/

【问题讨论】:

  • 您可以在 IE9+ 中仅使用 CSS3 完成此操作。
  • 我已经设法为你创建了一个完整的 Jquery 解决方案,让你自己失望:P

标签: javascript jquery html css jquery-animate


【解决方案1】:

您可以使用 CSS 的 @keyframes 而不使用 jQuery。

ul {
  position: relative;
  width: 250px;
  height: 50px;
  padding: 0;
  margin: 0;
  list-style: none;
}
li a {
  width: 100%;
  height: 100%;
  line-height: 50px;
  text-align: center;
}
li a:before {
  position: absolute;
  content: '';
  width: 100%;
  height: 100%;
  display: block;
  z-index: -1;
}
li {
  position: relative;
  height: 50px;
  width: 250px;
  text-align: center;
  border: 1px solid black;
}
a:hover:before {
  -webkit-animation: pulse 0.8s ease-in-out infinite alternate;
  animation: pulse 0.8s ease-in-out infinite alternate;
}
@-webkit-keyframes pulse {
  0% {
    background: transparent;
  }
  50% {
    background: green;
  }
  100% {
    background: transparent;
  }
}
@keyframes pulse {
  0% {
    background: transparent;
  }
  50% {
    background: green;
  }
  100% {
    background: transparent;
  }
}
<nav class="main-navigation">
  <ul>
    <li><a>Menu-item#1</a></li>
    <li><a>Menu-item#2</a></li>
    <li><a>Menu-item#3</a></li>
    <li><a>Menu-item#4</a></li>
  </ul>
</nav>

【讨论】:

  • 不,我希望悬停发生在不在 li 上。而且那里仍然没有“脉冲”效果。
  • @chipCholocate.py 这确实是脉动!惊人的;o 不知道 css 可以做到这一点。但是,这并不是很顺利。这就像信号量。原来是这样。例如,我希望它像动画不透明度一样平滑。可能吗?编辑:没关系,我把它放慢了 0.8 到 2 秒的过渡,它工作正常。只是定位有点不对。尝试用 css 解决这个问题。
  • @NikolaL。 - 当然,CSS 可以做这样的事情。
  • 这差点上网!只有一个失败。当它变为绿色时,它的动画效果非常好,但从绿色变为透明是即时的,没有过渡效果。
  • @NikolaL。我可以请您阅读css animations 始终记住您需要采取的compatibility messures 以使其在所有现代浏览器中工作吗?你会感到惊讶。
【解决方案2】:

这是给你的完整的 jQuery 解决方案,希望对你有帮助:=)

jQuery(document).ready(function($){
var intervalID;

    $(".main-navigation ul li a").hover(function(){ 

    var that = $(this); 
     var opacityToggle = function(){
        if(!that.children('.green').length){
         $(that).prepend('<span class="green"></span>');
            $('.green').animate({opacity:1},500);
        }
        else if(that.children('.green').length){
         
       $('.green').animate({opacity:0},500,function(){
       $('.green').remove();
       });
       }
            
     
   }
    
  intervalID = setInterval(opacityToggle, 500);    

},function(){
 $('.green').remove();	
clearInterval(intervalID);
intervalID = 0;    	
});
});
ul{
list-style:none;
}

li a {
height:100%;    
text-align:center;
position:relative;
width:inherit;
display:block;

}

li {
    height: 50px;
    width: 250px;
    text-align: center;
    border: 1px solid black;

}

.green{
position:absolute;
background-color:green;	
width:100%;
height:100%;
display:block;
opacity:0;
z-index:-1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav class="main-navigation">
    <ul>
        <li><a>Menu-item#1</a></li>
        <li><a>Menu-item#2</a></li>
        <li><a>Menu-item#3</a></li>
        <li><a>Menu-item#4</a></li>
    </ul>
</nav>

【讨论】:

  • 不,它不是动画
  • 元素...脚本所做的是动态创建一个 span 元素(“带有绿色类”),然后更改其不透明度并删除该元素。 ..
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签