Изменить непрозрачность всех элементов, кроме выбранного - PullRequest
2 голосов
/ 06 апреля 2011

У меня есть три изображения на одной странице, и я хотел бы затемнить элементы, на которые не нажимали.Сценарий работает в первую очередь, поэтому, если вы нажмете на одну картинку, две другие исчезнут.Если вы думаете, нажмите на уже блеклое изображение, все, что происходит, это то, что последнее не блекшее изображение также исчезает, вместо того, чтобы быть непрозрачным на 100%, а два других - блеклыми.

Ответы [ 2 ]

5 голосов
/ 06 апреля 2011

Вы подключаете обработчик click внутри обработчика click. Каждый раз, когда вы кликаете, новый обработчик кликов будет добавляться и вызываться при каждом последующем клике.

Обработчики кликов вызываются с добавлением новейшего имени first, что означает, что в конце все изображения становятся прозрачными.

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

$('a.images').click(function(){
    // Make all images (except this) transparent
    $('a.images').not(this).stop().animate({opacity: 0.4}, 300);
    // Make this opaque
    $(this).stop().animate({opacity: 1.0}, 300);
});

Демо: http://jsfiddle.net/gCsRL/1/

4 голосов
/ 06 апреля 2011

В этом коде:

$('a.images').click(function() {
    $(this).siblings().stop().animate({opacity: 0.4}, 300);
    $('a.images').click(function() {
        $not('this').stop().animate({opacity: 1.0}, 300);
    });
});

вы регистрируете обработчик кликов снова и снова для каждого клика.Просто попробуйте это вместо:

$('a.images').click(function() {
    $(this).siblings().stop().animate({opacity: 0.4}, 300);
    $(this).stop().animate({opacity: 1.0}, 300);
});
...