仅在屏幕上查看部分时设置动画

时间:2016-01-29 18:54:07

标签: jquery animation responsive-design

我正在尝试为简单的条形图设置动画,但它们确实如此,但我希望只有当该部分在屏幕上时,才能对条形图进行动画处理。

我的网站只有一个html文档,所有部分都在同一个文档中,所以我希望用户能够在滚动到该部分后看到动画发生。

我在想一个简单的if语句可以工作但是idk如何陈述条件。 我曾经想过#skills div top margin == window top 0但是如果可能的话就是idk。

你能帮帮我吗? :)

这是我的jQuery代码:

jQuery(document).ready(function(){
    jQuery('.skillbar').each(function(){
        if(#skill section is on screen){
            jQuery(this).find('.skillbar-bar').animate({
                width:jQuery(this).attr('data-percent')
            },2000);
        }
    });
});

1 个答案:

答案 0 :(得分:1)

测试以下代码并享受....

function  checkInView(elem,partial)
{
    var container = $(".scrollable");
    var contHeight = container.height();
    var contTop = container.scrollTop();
    var contBottom = contTop + contHeight ;
 
    var elemTop = $(elem).offset().top - container.offset().top;
    var elemBottom = elemTop + $(elem).height();

    var isTotal = (elemTop >= 0 && elemBottom <=contHeight);
    var isPart = ((elemTop < 0 && elemBottom > 0 ) || (elemTop > 0 && elemTop <= container.height())) && partial ;

    return  isTotal  || isPart ;
}

$(document).ready(function(){
$(".scrollable").scroll(function(){
    var result="",result2="";
   $.each( $(".scrollable p"),function(i,e){
       if (checkInView($(e),false)) {
           $( this ).addClass( "red" );
       } else {
           $( this ).removeClass( "red" );
       }
        result += " " +  checkInView($(e),false);
       result2 += " " +  checkInView($(e),true);
    });
    $("#tt").text(result);
    $("#kk").text(result2);
});
});
.scrollable{
    margin:10px;
    height:100px;
    overflow-y:scroll;
}
p
{
    border-width:1px;
    border-color:black;
    border-style:solid;
}
.red {
    background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
full:  <div id="tt"></div>
part: <div id="kk"></div>
<div class="scrollable">
    <p>item1<span></span></p>
    <p>item2<span></span></p>
    <p>item3<span></span></p>
    <p>item4<span></span></p>
    <p>item5<span></span></p>
    <p>item6<span></span></p>
    <p>item7<span></span></p>
    <p>item8<span></span></p>
</div>