2010-02-02 4 views

ответ

0

Вы можете использовать .live для настройки eventhandlers, прежде чем создать деталь.

или

function thover() { 
    $(this).toggleClass("hover"); 
} 

$("#item").mouseEnter(thover).mouseLeave(thover); 

или

$("item").hover(function() { $(this).toggleClass("hover",true); }, 
       function() { $(this).toggleClass("hover",false); } 
); 
+0

как это используется 'live'? и как это отличается от кода в OP? – nickf

+0

@nick: Я не привел пример живого (есть «или» там).Оба ответа различны, один использует mouseEnter и mouseLeave, а другой использует toggleClass. – Hogan

2

я не смог его воспроизвести. Написал это в Firebug на этой же странице:

$("p").hover(function() { $(this).html('a') }, function() { $(this).html('b') }); 

Всегда работает, даже если я двигаюсь очень быстро. Может быть, это потому, что вы забыли запятую перед второй функцией в вашем коде? Какой браузер вы используете?

0

Вот решение:

CSS:

#item:hover, #item.hover { 
    background-color: #f0f; 
} 

Javascript:

if ($.browser.msie) { // I'm not sure if IE7 or 8 support :hover yet 
    $('#item').hover(
     function() { $(this).addClass('hover'); }, 
     function() { $(this).removeClass('hover'); } 
    ); 
} 

Этот код делает свой край корпус тоньше.

Достойные браузеры, которые имеют хорошую поддержку CSS, не должны замедляться при использовании Javascript-вызовов только потому, что IE неисправен. Если кто-то настаивает на использовании IE, то они все равно будут получать зависающие эффекты, но иногда это может зависнуть. Вы действительно так заботитесь об этих людях?

0

Проблема с зависанием зависания зависит от того, какой браузер вы используете. Чем выше браузер, тем быстрее работает JavaScript. То, как вы вызываете библиотеку jQuery, также имеет значение (я предлагаю либо вызвать локальную копию lib, либо использовать API библиотек Google). С каждым новым выпуском библиотеки он становится все быстрее и быстрее, поскольку они уменьшают код и делают вещи более эффективными, поэтому я предлагаю позвонить в последнюю версию.

С вызовом jQuery 1.4.2 и выше можно вызвать функцию .toggle() вместо указания функций мыши, которые содержатся в функции наведения. То, что вы делаете с кодом, в основном такое же, как и .hover(mouseover, mouseout) (в его базовой форме). Каждая вызванная вами функция (с .removeClass и .addClass) вызывает каждое действие мыши.

Использование этого ускорит ваш код becuase тумблер был оптимизирован для замены функции мыши:

jQuery(document).ready(function($) { 
    $('#item').hover(function() { 
    $(this).toggleClass('hover'); 
    }); 
}); 

EDIT:

Однако, если вы желаете, чтобы добавить анимацию или задать атрибуты функция .hover(), то вы в конечном итоге вызываете каждую функцию мыши, как в исходном коде. Хотя вы также можете просто использовать код, который я использовал выше, и использовать функции в пределах .toggleClass().

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