Можно ли оптимизировать код?
сделал вот такой код (при наведении на кнопку меняется прозрачность родительского DIV, но только при наличии второго дополнительного класса)
$('.trigger').on({
mouseenter: function(){
if ($(this).hasClass('inactive')) {$(this).parents('div.forabg').animate({ opacity: '1.0' }, 300); }
},
mouseleave: function(){
if ($(this).hasClass('inactive')) {$(this).parents('div.forabg').animate({ opacity: '0.3' }, 300); } }
});
хочется условия сделать общим. гуру, можно ли как-то оптимизировать данный код? или оставить как есть? |
$('.trigger').on('mouseenter mouseleave', '.inactive', function (e) {
$(this).parents('div.forabg').animate({
opacity: e.type == 'mouseenter' ? '1.0' : '0.3'
}, 300);
});
примерно так |
не работает, хотя и ошибок нет.
|
alecto,
$('div.forabg').on('mouseenter mouseleave', '.trigger.inactive', function(event) {
var opacity = event.type == 'mouseenter' ? '1.0' : '0.3'
$(event.delegateTarget).stop(true).animate({
opacity: opacity
}, 300)
})
|
супер! пашет!
но, очень сложная для моего понимания конструкция. вернее я ее готовую понимаю, но сам построить в таком виде не смогу. Рони, если бы вы мне еще объяснили, как благодарности вам поставить... никак сайт не позволяет :( скажите пожалуйста, можно ли к этому коду добавить что-то типа transition-delay:1s; из варианта CSS? чтобы при наезде мыши была небольшая задержка, "защита" от случайной проводки. но, чтобы при уходе мыши - все работало как сейчас, без задержки. |
Цитата:
$('div.forabg').on('mouseenter mouseleave', '.trigger.inactive', function(event) {
var opacity = event.type == 'mouseenter' ? '1.0' : '0.3'
$(event.delegateTarget).stop(true,true).delay(100).animate({ opacity: opacity }, 300)
})
|
работает, но в обе стороны.
чтобы поставить задержку только на mouseenter , надо вернуться к варианту первого сообщения с использованием .stop(true,true).delay(100) ? |
alecto,
посмотрите на вторую строку и замените 100 на 0 и 100 |
alecto,
$('div.forabg').on('mouseenter mouseleave', '.trigger.inactive', function(event) {
var time = 100, opacity = event.type == 'mouseenter' ? '1.0' : (time = 0,'0.3');
$(event.delegateTarget).stop(true,true).delay(time).animate({ opacity: opacity }, 300)
})
|
мда, черт ногу сломит, но код работает!
фантастика! премного благодарен, мудрейший Рони!!! |
| Часовой пояс GMT +3, время: 09:36. |