У меня есть страница WordPress, на которой я хочу отобразить уменьшенное изображение, которое при нажатии заменяется полноразмерным изображением и плавно масштабируется до нового полного размера. Моя функция WordPress позволяет выводить src, ширину и высоту как для миниатюр, так и для полноразмерных файлов.
Я пробовал два решения этой проблемы:
1) Миниатюра завернута в ссылку в полный размер - http://jsbin.com/inuxej/8
2) Миниатюра рядом со скрытым (отображение: нет) в полном размере - http://jsbin.com/ogasic
Они оба работают, но переход не гладкий. Я не совсем уверен, как мне добиться плавного масштабирования от миниатюры до полноразмерного. У кого-нибудь есть идеи, как сделать этот переход плавным, чтобы после щелчка по миниатюре загружался полный размер, а затем анимация и масштабирование целого блока до полного размера?
Заранее большое спасибо!
-
Попытка 1:
JSBIN:
http://jsbin.com/inuxej/8
Javascript:
$(document).ready(function(){
// random resize images
$('.portfolio-image img').each(function() {
var currWidth = $(this).attr("width");
var currHeight = $(this).attr("height");
$(this).removeAttr("width");
$(this).removeAttr("height");
var transformScale = (Math.floor(Math.random()*60 + 40))/100;
$(this).width(Math.floor(currWidth*transformScale));
$(this).height(Math.floor(currHeight*transformScale));
});
// portfolio images - make bigger on click
$('.portfolio-image a').click(function(e) {
e.preventDefault();
var smallImageSrc = $(this).children('img').attr("src");
var bigImageSrc = $(this).attr("href");
$(this).children('img').removeAttr("width");
$(this).children('img').removeAttr("height");
$(this).children('img').attr("src", bigImageSrc);
$(this).children('img').load(function(){
$(this).removeAttr("style");
$('#ajax-loader').fadeOut();
});
});
});
HTML:
<!DOCTYPE html>
<html>
<head>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
.portfolio-image {
float: left;
margin: 15px;
}
a, img {
border: none;
text-decoration: none;
}
</style>
</head>
<body>
<div class="portfolio-image">
<a href="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/1-full.jpg">
<img src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/1-thumb.jpg" height="300" width="200"/>
</a>
</div>
<div class="portfolio-image">
<a href="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/2-full.jpg">
<img src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/2-thumb.jpg" height="300" width="200"/>
</a>
</div>
<div class="portfolio-image">
<a href="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/3-full.jpg">
<img src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/3-thumb.jpg" height="300" width="200"/>
</a>
</div>
<div class="portfolio-image">
<a href="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/4-full.jpg">
<img src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/4-thumb.jpg" height="300" width="200"/>
</a>
</div>
</body>
</html>
Я также попробовал альтернативное решение, когда WordPress выводит оба изображения, а полный размер скрыт. Тем не менее, это, похоже, также вызывает проблему, поскольку jquery, похоже, получает значения измерений как неопределенные, так как объект настроен на отображение: нет.
Попытка 2:
JSBIN: http://jsbin.com/ogasic
Javascript:
$(document).ready(function(){
// random resize images
$('.portfolio-image img').each(function() {
var currWidth = $(this).attr("width");
var currHeight = $(this).attr("height");
$(this).removeAttr("width");
$(this).removeAttr("height");
var transformScale = (Math.floor(Math.random()*60 + 40))/100;
$(this).width(Math.floor(currWidth*transformScale));
$(this).height(Math.floor(currHeight*transformScale));
});
// portfolio images - make bigger on click
$('.portfolio-image').click(function() {
$(this).attr("width", $(this).children(".portfolio-image-display").attr("width"));
$(this).attr("height", $(this).children(".portfolio-image-display").attr("height"));
var bigImageSrc = $(this).children(".portfolio-image-full").attr("src");
var bigImageWidth = $(this).children(".portfolio-image-full").attr("width");
var bigImageHeight = $(this).children(".portfolio-image-full").attr("height");
$(this).children('.portfolio-image-display').attr("src", bigImageSrc);
$(this).children('.portfolio-image-display').load(function(){
$(this).animate({
height: bigImageHeight,
width: bigImageWidth
}, 1000, function() {
//after
});
});
});
});
HTML:
<!DOCTYPE html>
<html>
<head>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
.portfolio-image {
float: left;
margin: 15px;
}
.portfolio-image-full {
display: none;
}
a, img {
border: none;
text-decoration: none;
}
</style>
</head>
<body>
<div class="portfolio-image">
<img class="portfolio-image-display" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/1-thumb.jpg" height="300" width="200"/>
<img class="portfolio-image-full" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/1-full.jpg" height="600" width="400"/>
</div>
<div class="portfolio-image">
<img class="portfolio-image-display" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/2-thumb.jpg" height="300" width="200"/>
<img class="portfolio-image-full" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/2-full.jpg" height="600" width="400"/>
</div>
<div class="portfolio-image">
<img class="portfolio-image-display" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/3-thumb.jpg" height="300" width="200"/>
<img class="portfolio-image-full" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/3-full.jpg" height="600" width="400"/>
</div>
<div class="portfolio-image">
<img class="portfolio-image-display" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/4-thumb.jpg" height="300" width="200"/>
<img class="portfolio-image-full" src="http://dl.dropbox.com/u/396112/_IMG/_misc/testimages/4-full.jpg" height="600" width="400"/>
</div>
</body>
</html>