2012-02-07 4 views
1

Этого кодаНесколько наложений DIV на одной странице

$(document).ready(function(){ 
    $(".one").hover(
     function(){ 
      $(".overlay").fadeTo(200,1).show(); 
     }, 
     function(){ 
      $(".overlay").delay(500).fadeTo(200,0); 
     } 
    ); 
}); 

накладки второго DIV поверх первого, но перерывы для нескольких экземпляров на одной странице. Думаю, мне нужно поставить $(this). где-то там, но не могу понять, где.

Любая помощь приветствуется.

+0

Справка по HTML-коду и JSFiddle еще лучше. – gdoron

+0

Не уверен, что вы имеете в виду, можете ли вы предоставить [jsfiddle.net] (http://jsfiddle.net) –

+0

Я сделаю JSFiddle, но сайт, похоже, не загружается быстро, если вообще. – Andy

ответ

2

Вы можете получить к нему доступ путем обхода. Предполагая, что это дочерний элемент «один», это применит эффект только к детям с именем «overlay» зависающего элемента «один».

$(".one").hover(
    function(){ 
     $(this).children(".overlay").fadeTo(200,1).show(); 
    }, 
    function(){ 
     $(this).children(".overlay").delay(500).fadeTo(200,0); 
    } 
); 

Heres ссылка jQuery tree traversal.

+0

Удивительно, это работает! http://jsfiddle.net/AndyMP/vDBRk/4/ – Andy

+1

Если вы добавите .stop (true, true) перед анимацией, это также предотвратит возможную бесконечную цепочку наведения/остановки, вот пример http://jsfiddle.net/73Y8x/ – CMYJ

+0

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

1

Вы правы, вы действительно нуждается в this:

JQuery:

$(document).ready(function(){ 
    $(".one").hover(
     function(){ 
      $(".overlay",this).fadeTo(200,1).show(); 
     }, 
     function(){ 
      $(".overlay",this).delay(500).fadeTo(200,0); 
     } 
    ); 
}); 

Вот jsFiddle (с высотой уменьшенной для удобного просмотра).

Путь «это» здесь заключается в том, что, когда вы наводите над .one div, «это» относится к div, который вы нависаете над. Функции внутри события hover будут ссылаться на зависание div и делать то, что вы хотите сделать с ними. Без «этого» действия, которые вы применяете в своих функциях, будут применены ко всем элементам с классом «overlay», а не только наложением внутри div, зависающего. «это» фактически ограничивает действия, применяемые на основе зависающего элемента («это»). Другими словами, $(".overlay",this) квалифицирует контекст и ограничивает его.

+0

Я думаю, что с опытом я привык к вариации в том, как эта «эта» часть реализованы. Я пытался отбросить $ (это) где-нибудь. Спасибо за помощь. – Andy

+1

Я добавил краткое объяснение о том, что это работает в контексте моего примера. – j08691

+0

Удивительный. Еще раз спасибо. – Andy

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