Моя проблема: я довольно новичок в 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;
}
Извиняюсь, если я был неточен с любой из моих проблемных сообщений и заранее заблаговременно за любую помощь.
Я сделал простой пример того, как это можно сделать, но сначала поговорим о кодировании.
Когда вы вводите код, попробуйте сделать небольшие управляемые - и читаемые - куски и структурируйте его так, чтобы это имело смысл, и для любви Бога комментарий о том, что вы делаете, или вы вернетесь, почесывая голову, спрашивая "что это снова?".
Если вы это сделаете, будет гораздо легче отладить, когда что-то пойдет не так.
Теперь поговорим о некоторых незначительных проблемах.
При использовании 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%;
}