как по очереди прижимать объект влево,вправо
Доброго времени.
Надо сделать следующее: картинка сжимается вправо до 0px а потом разворачивается обратно, но опять с левой стороны вправо. И так бесконечно. Все анимации работают, но right:0 и left:0 по очереди программа не понимает. Пробовал и css и addClass removeClass - ничего не работает. Вот один из примеров:
var i=1,j;
function chisla (){
i++;
if(i%2>0){
j='left';
} else {
j='right';
}
$('#pic1').animate({j:'0','top':i},100,function(){
chisla();
});
}
chisla();
т.е. top:i - исправно работает и картинка ползет вниз. Как уметь прилеплять картинку к разным сторонам по очереди? Спасибо заранее! |
Вы просто представьте как это работает.
В фазе сжимания нужно одновременно уменьшать width и увеличивать left на такое же значение, а в фазе разжимания просто увеличивать width. Это если картинка position absolute. |
Да, спасибо, отличное решение :) СДелал так:
$('#pic1').animate({'width':'0px','left':'250px'},1500)
.animate({'width':'0px','left':'0px'},3000)
.animate({'width':'250px'},1500);
Работает. Но неужели не сделать никак проще? |
Куда уж проще.
Цитата:
<script type = "text/javascript">
window.onload = function(){
var img = document.getElementById("myimg"), open = true, width = 300, left = 0;
img.style.position = "absolute";
img.style.height = "100px";
(function(){
if(open){
img.style.left = left ++ + "px";
}
img.style.width = (open ? width -- : width ++) + "px";
if(width == 0){
open = false;
}
if(width == 300){
open = true;
}
window.setTimeout(arguments.callee, 10);
}())
}
</script>
<div class = "wrapper">
<img id = "myimg" src = "http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/>
</div>
|
shaltay,
Вариант ...
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#pic1{position: relative; width: 336px; height: 76px;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script type="text/javascript">
$(function() {
(function(){
$('#pic1').animate({'width':'0px','left':'336px'},1500, function(){
$('#pic1').css({left:'0px'})} ).animate({'width':'336px'},1500 );
arguments.callee()
})()
});
</script>
</head>
<body>
<img id="pic1" src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" />
</body>
</html>
|
poorking,
В функции left никогда не возращаеться в исходное положение поэтому картинка как гусеница убежит в право ... Исправленный вариант без jQuery ...
<img id = "myimg" src = "http://javascript.ru/forum/images/ca_serenity/misc/logo.gif"/>
<script type = "text/javascript">
var a = document.getElementById("myimg"),
b = !0,
c = 300;
a.style.position = "absolute";
a.style.height = "100px";
(function () {
a.style.width = (b ? c-- : c++) + "px";
if (c == 0 || c == 300) b = !b;
a.style.left = (b && 300 - c || 0) + "px";
window.setTimeout(arguments.callee, 10)
})();
</script>
|
рони,
так автор сказал Цитата:
|
Цитата:
http://shaspace.spb.ru/tripinadva_rect/ |
Цитата:
|
Цитата:
|
а зачем три раза функцию создавать друг в друге?
|
Цитата:
$(function() { // это функция = window.onload -- запуск после загрузки страницы
(function(){ //основная функция анимаци
$('#pic1').animate({'width':'0px','left':'336px'},1500, function(){ //функция возврата картинки на исходное место после 1 цикла анимации
$('#pic1').css({left:'0px'})} ).animate({'width':'336px'},1500 );
arguments.callee()
})()
});
|
А чем сложнее сделать цепную функцию, как у меня в коде, чем функцию в функции?
|
| Часовой пояс GMT +3, время: 09:22. |