2009-03-17 5 views
0

У меня есть этот JQuery код, который скользит в «эм» бирку, при наведении курсора мыши, и вниз по размытости:JQuery анимации проблемы

$(".entries a").hover(
    function() { 
    $(this).find("em").animate({ height:"100%"}, 500) 

    }, 
    function() { 
    $(this).find("em").animate({ height:"0%"}, 500) 
    } 
); 

HTML код

<div class="entries"> 
<a href="http://www.website.com"> 
<em>Description</em> 
<img src="thumb.jpg"/> 
</a> 
<a href="http://www.website.com"> 
<em>Description</em> 
<img src="thumb.jpg"/> 
</a> 
<a href="http://www.website.com"> 
<em>Description</em> 
<img src="thumb.jpg"/> 
</a> 
</div> 

Когда я двигаю мышь вне тег, тег em сбрасываются на несколько пикселей вниз, а затем начинают скользить. Это создает эффект запаздывания.

Есть ли лучший способ написать это?

Как использовать var для кэширования $ (this) .find ("em")?

Любые советы по производительности и стилю кода будут очень оценены.

ответ

1

попробуйте использовать это, я думаю, что это тот эффект, который вы собираетесь использовать, и он использует более плавные переходы.

$(".entries a").hover(
    function() { 
    $(this).find("em").slideDown(500); 
    }, 
    function() { 
    $(this).find("em").slideUp(500); 
    } 
); 

Edit:
если вы хотите что-то действительно эффективное, вы можете захотеть, чтобы избежать JQuery для выбора и просто использовать $(this.childNodes[1]), чтобы выбрать его.
[1] это потому, что пробел является элементом 0

+0

Спасибо, работает лучше. Как я могу кэшировать $ (this) .find ("em") в var и использовать его в коде? –

+0

Знаете ли вы, насколько он быстрее? Могу ли я заметить разницу? Извините, что попросил об этом еще раз, но мне очень хотелось бы знать, как я могу кэшировать $ (this) .find ("em") в var и использовать его в коде? –

+0

На самом деле нет простого способа кэшировать его, что я вижу, потому что вы применяете одну функцию к нескольким элементам, вам нужен массив, который требует хранения индекса для каждого элемента, а затем его обратно на квадрат – cobbal

0

Не прямой ответ на вашу конкретную проблему, но я рекомендую вам ознакомиться с интерфейсом JQuery. Он обладает анимационными эффектами, подобными тем, что вы пытались здесь.

Смежные вопросы