2010-06-17 5 views
3

Я использую этот код для изменения непрозрачности, когда пользователь включен и выключен, к сожалению, когда пользователь нажимает на изображение, непрозрачность не остается на 1. У кого-нибудь есть ответ?Помощь с jquery animate()

$(document).ready(function(){ 

    $('img#slide').animate({"opacity" : .7}) 
    $('img#slide').hover(function(){ 
     $(this).stop().animate({"opacity" : 1}) 
    }, function(){ 
     $(this).stop().animate({"opacity" : .7}) 

    });     


    $('img#slide').click(function(){ 
    $(this).animate({"opacity" : 1}); 
    }); 

}); 
+1

важно, чтобы вы включили код в вопрос, чтобы будущие поисковики могли извлечь из этого выгоду, даже после того, как пастебин удалил пасту. Я переместил его в вопросе для вас. –

ответ

2

Вы должны каким-то образом отключить mouseleave анимации, когда пользователь нажимает кнопку.

Общим подходом является добавление класса и проверка mouseleave на предмет наличия класса.

Тест живой пример:http://jsfiddle.net/KnCmR/

$(document).ready(function() { 

    $('img#slide').animate({ "opacity": .7 }) 

    .hover(function() { 
     $(this).stop().animate({ "opacity": 1 }) 
    }, 
    function() { 
     if (!$(this).hasClass("active")) { 
      $(this).stop().animate({ "opacity": .7 }); 
     } 
    }) 

    .click(function() { 
     $(this).addClass("active"); 
    }); 
}); 

EDIT:

Если вы хотите второй щелчок, чтобы восстановить поведение назад к оригиналу, используйте toggleClass() вместо addClass():

 $(this).toggleClass("active"); 

Jquery Docs:

+0

+1 Этот метод особенно хорошо работает в ситуации, когда вы контролируете более одного элемента DOM. Он позволяет обобщать код и привязывать его к затронутому элементу. –

+0

@Doug - Спасибо за +. Вы поднимаете хороший момент. Это можно считать излишним, если есть только один элемент с поведением. В этом случае ваша эффективность будет более эффективной. – user113716

+0

Эффективное да ... но тогда, если вы добавите элемент вниз по линии, мой придется переписать. Поэтому все зависит от проекта. –

1

Вам просто нужно отслеживать, была ли она нажата или нет. Вы можете сделать это несколькими способами, но поскольку у вас есть только один элемент, который вы отслеживаете, переменная - это самый простой способ сделать это. Я также оптимизировал ваш код для использования цепочки. Я также сменил селектор на более эффективный. #slide лучше img#slide так как id должен быть уникальным:

$(document).ready(function(){ 
    var clicked = false; 

    $('#slide') 
    .animate({"opacity" : 0.7}) 
    .hover(function(){ 
     if(!clicked) { 
     $(this).stop().animate({"opacity" : 1}); 
     } 
    }, function(){ 
     if(!clicked){ 
     $(this).stop().animate({"opacity" : 0.7}); 
     } 
    }) 
    .click(function(){ 
     clicked = true; 
    }); 
}); 
+0

+1 Использование локальной переменной будет более эффективным, чем мой ответ, если в конечном счете будет только один элемент. – user113716

0

Все ответы в этой теме хорошо, и будет работать. Но ради этого здесь другой подход.

На основе вашего кода и вашего вопроса, что вы на самом деле делаете, это удаление поведения наведения из элемента. Что должно быть сделано, как показано ниже:

$(document).ready(function(){ 

    $('img#slide').animate({"opacity" : .7}); 

    $('img#slide').hover(function(){ 
     $(this).stop().animate({"opacity" : 1}); 
    }, function(){ 
     $(this).stop().animate({"opacity" : .7}); 
    }); 

    $('img#slide').click(function(){ 
    $(this).unbind('hover'); 
    }); 
}); 

который может быть переработан, чтобы позволить переключая поведения новым способом:

$(document).ready(function(){ 

    var over = function(){ 
    $('img#slide').stop().animate({"opacity" : 1}); 
    }; 

    var out = function(){ 
    $('img#slide').stop().animate({"opacity" : 0.7}); 
    }; 

    var on = function(){ 
    $('img#slide').hover(over, out).one('click', off); 
    } 

    var off = function(){ 
    $('img#slide').unbind('hover').one('click', on); 
    }; 

    $("img#slide").one('click', on); 

    out.call(); 

}); 

Примечание: Я не проверял это (я на работе), Но ты получил идею.