Jquery children () прозрачность анимации

0

Моя проблема: я довольно новичок в JQuery. Я пытаюсь добавить класс '.visible' в div ".content" после завершения анимации.

Каждое изображение div содержит изображение в виде обложки, которая растет, чтобы заполнить всю область.

По сути, каждый контентный div имеет дополнительный текстовый контент, который я хочу показывать только после того, как пользователь нажал на родительский элемент и затем исчезнет во втором клике, когда родительский элемент вернется к исходному размеру.

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

Мое попытку: я играл с .children().addClass('visible') но не повезло. Я уверен, что делаю ошибку новобранец, но после поиска Stackoverflow и других сайтов мне не удалось найти ответ, который касается этой ситуации (хотя это может быть связано с неправильным поиском с моей стороны).

Код JQuery:

$(window).load(function(){
    $(".image").bind('click', function() {

        var that = $(this),
        offsets = that.position(),
        top = offsets.top,
        left = offsets.left,
        clone = that.clone(),
        parent = that.parent(),
        width = parent.width(),
        height = parent.height();

        clone.addClass('clone').appendTo(parent).css({
            'top': top,
            'left': left
        }).animate({
            'top': 0,
            'left': 0,
            'width': width,
            'height': height,
        }, 1000).click(function(){
            $(this).fadeOut().siblings().animate({
                'opacity': 1
            }, 1000);
        }).siblings().animate({
            'opacity': 0.1
        }, 1000);
    });
 });

Надеюсь, что я опубликовал достаточно информации, но я рад поделиться с ним и html и css, если это поможет.

Соответствующие классы CSS:

  .content { 
      filter:alpha(opacity=0); 
      -moz-opacity:0; 
      -khtml-opacity:0; 
      opacity: 0; 
  }

  .visible { 
      filter:alpha(opacity=100); 
      -moz-opacity:1; 
      -khtml-opacity:1; 
      opacity: 1;
  }

  .wrap { 
      height: 725px; 
      width: 974px; 
      margin: 0 auto; 
      vertical-align: top; 
      position:  relative;
 }

 .image { 
      height: 233px; 
      width: 233px; 
      display:inline-block; 
      vertical-align: top;   
      margin: 0 11px 11px 0; 
      background-size: cover; 
      border: 1px solid #000000;
 }

Извиняюсь, если я был неточен с любой из моих проблемных сообщений и заранее заблаговременно за любую помощь.

Теги:
opacity

1 ответ

2
Лучший ответ

Я сделал простой пример того, как это можно сделать, но сначала поговорим о кодировании.

Когда вы вводите код, попробуйте сделать небольшие управляемые - и читаемые - куски и структурируйте его так, чтобы это имело смысл, и для любви Бога комментарий о том, что вы делаете, или вы вернетесь, почесывая голову, спрашивая "что это снова?".
Если вы это сделаете, будет гораздо легче отладить, когда что-то пойдет не так.

Теперь поговорим о некоторых незначительных проблемах.
При использовании JQuery рекомендуется использовать $(document).ready(function(){...}); как ваша точка входа.

.bind давно устарел, даже его преемник .live уже давно устарел, вы должны использовать .on, но нам действительно нужно использовать его, если содержимое было добавлено динамически в DOM после .ready.

Фу, хорошо, теперь, когда об этом позаботились, вот мой простой пример, чтобы вы пошли в правильном направлении.


Пример | Код

Javascript

var scale_increase = 1.5,
image_fade = 500,
txt_fade = 250;

$(document).ready(function(){
    //Attach click event handler
    $(".img-container").click(function(){
        var self = $(this);

        var img = $("img", this),
            txt = $(".img-text", this);

        //Make sure we aren't animating, otherwise the image resizing will not match
        if(img.is(":animated") || txt.is(":animated")) return;

        if(self.hasClass("img-displaying")){
            //Revert back to default state
            self.removeClass("img-displaying");

            //Hide the text
            txt.animate({
                opacity: 0
            }, txt_fade, function(){
                //After the text has been hidden, make the image smaller
                img.animate({
                    width: parseInt(img.prop("width"))/scale_increase,
                    height: parseInt(img.prop("height"))/scale_increase
                }, image_fade);
            });
        }else{
            //Make picture larger and show the text
            self.addClass("img-displaying");

            //Make the image bigger
            img.animate({
                width: parseInt(img.prop("width"))*scale_increase,
                height: parseInt(img.prop("height"))*scale_increase
            }, image_fade, function(){
                //After it grown, show the text
                txt.animate({
                    opacity: 1
                }, txt_fade);
            });
        }
    });
 });

HTML

<div class='img-container'>
    <img src="http://images.wisegeek.com/young-calico-cat.jpg" width="200" height="156" />
    <div class='img-text'> This is a cute kitty I want to cuddle with! :)</div>
</div>

<div class='img-container'>
    <img src="http://images.wisegeek.com/young-kittens.jpg" width="200" height="148" />
    <div class='img-text'> Oh dear, they're SO adorable!</div>
</div>

CSS

.img-text{
    text-align: left;
    font-style: italic;
    opacity: 0;
    width: 100%;
}

Ссылки (в порядке появления)

  • 0
    Спасибо - это действительно полезный ответ, который дает мне много возможностей для изучения и изучения. Спасибо, что нашли время, чтобы исправить мои вредные привычки!
  • 0
    @Slerbal Здесь, чтобы помочь! Это действительно важно исправить плохие привычки кодирования, прежде чем они "обосноваться". Вы всегда можете заглянуть на хорошую вики-страницу о практике кодирования, чтобы найти еще несколько указателей.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню