Jquery animate()在chrome上变得迟钝

时间:2013-04-26 07:50:25

标签: jquery html css performance jquery-animate

这是我的第一个jquery脚本:

<!DOCTYPE html>
<html>
    <head>
        <title>Sliding test</title>
        <style>

                    html {
                height: 100%;
                padding: 0;
                margin: 0;
            }

            body{
                text-align: center;
                background: url('bg.png');
                height: 100%;
                margin: 0;
                padding: 0;
                box-shadow: 0 0 900px 35px rgba(0, 0, 0, 0.5) inset;
            }

            #global_wrap {
                width: 1000px;
                margin: 30px auto 0;
            }

            .container {
                /*background: pink;*/
                height: 240px;
                width:  290px;
                overflow: hidden;
                border-radius: 5px 5px 5px 5px;
                border: 3px solid #EAEAEA;
                display: inline-block;

            }

            .slide_wrapper {
                height: 500px;
                width:290px;
                margin-left: 0px;
                padding-left: 0px;
                text-align: left;
                background: white;
                margin-top: 0;
            }



            li {
                color: grey;
                list-style: none outside none;
            }

            a {
                color: inherit;
                text-decoration: none;
            }

            img {
                display: block;
            }


            h3 {
                background: none repeat scroll 0 0 #252525;
                color: white;
                font-family: sans-serif;
                margin: 0;
                padding-bottom: 12px;
                padding-top: 12px;
                text-align: center;
                width: 290px;
            }
        </style>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
&nbsp;
        <div id="global_wrap">
            <div class="container">
                <div class="slide_wrapper">
                    <a href="javascript:;">
                        <img src="visuel1.jpg" width="290" height="193">
                        <h3>Category 1</h3>
                    </a>
                    <ul>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                    </ul>

                </div>
            </div>



            <div class="container">
                <div class="slide_wrapper">
                    <a href="javascript:;" >
                        <img src="visuel2.png" width="290" height="193">
                        <h3>Category 2</h3>
                    </a>
                    <ul>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                    </ul>

                </div>
            </div>



            <div class="container">
                <div class="slide_wrapper">
                    <a href="javascript:;">
                        <img src="visuel3.jpg" width="290" height="193">
                        <h3>Category 3</h3>
                    </a>
                    <ul>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                        <li><a href="#">link</a></li>
                    </ul>

                </div>
            </div>

        </div>


        <script>   
        //wrapper_click=false;


        $(".slide_wrapper a").click(function(){

                if($(this).hasClass('open'))
                {
                   // wrapper_click = false;
                    $(this).parent().animate({'margin-top': '0px'}, 'slow');
                    $(this).removeClass('open');
                }
                else
                {
                    //wrapper_click = true;
                    $(this).parent().animate({'margin-top': '-193px'}, 'slow');
                    $(this).addClass('open');
                }
            });

        </script>
    </body>
</html>

我不知道为什么,但它在jsfiddle上工作正常: http://jsfiddle.net/svmK5/

它适用于所有浏览器,除了chrome,我不明白为什么......我认为我的代码中出现了一些错误,这使得它有点滞后

有人对脚本中的错误有所了解吗?

3 个答案:

答案 0 :(得分:2)

我发现是什么导致脚本滞后,这是由于这个CSS属性:

html {
  height: 100%;
}

我不知道为什么这会使我的脚本变得迟钝,但是当我删除它时,我的脚本完美地运行

谢谢大家的帮助,特别是joel harkes,非常有用的帮助!

答案 1 :(得分:1)

这里的Chrome工作正常,您可以选择使用切换类来减少编码:

// toggleClass( class, [duration] )

$(".slide_wrapper a").click(function () {
    $(this).parent().toggleClass('open','slow');
});

的CSS:

.open { 
 'margin-top': '-193px'
}

同样,slide_wrapper内的所有链接都会执行点击,我建议:

<a class="toggler" href="javascript:;">
$(".toggler").click...

这个小提琴可能会有所帮助:http://jsfiddle.net/svmK5/8/

修复我使用的布局错误:

.slide_wrapper {
   float: left 
}

答案 2 :(得分:0)

这在Chrome 26.0.1410

中运行良好
img{ image-rendering: -webkit-optimize-contrast; }