Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.04.2011, 19:32
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

как по очереди прижимать объект влево,вправо
Доброго времени.
Надо сделать следующее: картинка сжимается вправо до 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 - исправно работает и картинка ползет вниз. Как уметь прилеплять картинку к разным сторонам по очереди?

Спасибо заранее!

Последний раз редактировалось shaltay, 21.04.2011 в 19:34.
Ответить с цитированием
  #2 (permalink)  
Старый 21.04.2011, 20:34
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Вы просто представьте как это работает.
В фазе сжимания нужно одновременно уменьшать width и увеличивать left на такое же значение, а в фазе разжимания просто увеличивать width. Это если картинка position absolute.
__________________
readOnly
Ответить с цитированием
  #3 (permalink)  
Старый 21.04.2011, 20:55
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

Да, спасибо, отличное решение СДелал так:
$('#pic1').animate({'width':'0px','left':'250px'},1500)
.animate({'width':'0px','left':'0px'},3000)
.animate({'width':'250px'},1500);

Работает. Но неужели не сделать никак проще?
Ответить с цитированием
  #4 (permalink)  
Старый 21.04.2011, 21:25
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Куда уж проще.
Сообщение от shaltay
И так бесконечно.
вот без jQuery
<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>
__________________
readOnly
Ответить с цитированием
  #5 (permalink)  
Старый 21.04.2011, 21:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>
Ответить с цитированием
  #6 (permalink)  
Старый 21.04.2011, 22:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>
Ответить с цитированием
  #7 (permalink)  
Старый 21.04.2011, 23:53
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

рони,
так автор сказал
Сообщение от shaltay
И так бесконечно.
- я так и сделал. Кто знает, зачем ему это))
__________________
readOnly
Ответить с цитированием
  #8 (permalink)  
Старый 22.04.2011, 11:48
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

Сообщение от poorking Посмотреть сообщение
рони,
так автор сказал - я так и сделал. Кто знает, зачем ему это))
Вот для чего Только картинки изменить на нормальные и интересный эффект вроде бы.
http://shaspace.spb.ru/tripinadva_rect/
Ответить с цитированием
  #9 (permalink)  
Старый 22.04.2011, 11:49
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

Сообщение от рони Посмотреть сообщение
shaltay,
Вариант ...
<!DOCTYPE html>
 $(function() {
(function(){
$('#pic1').animate({'width':'0px','left':'336px'},1500, function(){
$('#pic1').css({left:'0px'})} ).animate({'width':'336px'},1500  );
arguments.callee()
})()
});
Спасибо за вариант! Скажите, а как именно сделана в этом коде зацикленность?
Ответить с цитированием
  #10 (permalink)  
Старый 22.04.2011, 13:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от shaltay
как именно сделана в этом коде зацикленность?
arguments.callee --> содержит ссылку на выполняющуюся функцию. поэтому последнее действие функции запустить саму себя ещё раз - равносильно chisla(); в вашем первом примере в 10 строке
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить присутствует ли на странице заданный объект? nick Общие вопросы Javascript 7 18.12.2010 19:16
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
Получить объект содержащий caller no_alex Общие вопросы Javascript 14 20.03.2009 21:37
Как заставить this в обработчике события указывать на объект? Dmitryk Events/DOM/Window 3 16.03.2009 08:45
как сделать гиперсылку на объект javascript??? kos_walker Общие вопросы Javascript 3 30.09.2008 06:58