Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.05.2013, 09:13
Новичок на форуме
Отправить личное сообщение для ATNC Посмотреть профиль Найти все сообщения от ATNC
 
Регистрация: 10.04.2013
Сообщений: 4

текст = шарик
Добрый день. Есть текст. Как сделать так, чтобы доходя до края окна, он не останавливался, а отбивался от края, как шарик, и летел в другую сторону?
<html>
<body id="body">
        <span id="move-me" style="position: absolute; border: 1px dashed black;">тытыты</span>
        <script type="text/javascript">
                var phi = Math.PI / 6;   //устанавливаем кут  
                var rho = 0;  //Начальное значение радиус -вектора
                var rhoOffset = 5.5; //прирост радиус-вектора   
                function moveByLine() {   
                        //по Х
                        document.getElementById('move-me').style.left = rho * Math.cos(phi) + 'px';  
                        //по У
                        document.getElementById('move-me').style.top = rho * Math.sin(phi) + 'px';   
                                  rho += rhoOffset;   
                                 //ЕСЛИ елемент выходит за нижний и правый край страницы - отменить интервал
                                 if ((document.getElementById('move-me').offsetLeft +
                                   document.getElementById('move-me').offsetWidth >= 
                                   document.getElementById('body').clientWidth) ||
                           (document.getElementById('move-me').offsetTop + 
                                   document.getElementById('move-me').offsetHeight >=
                                   document.getElementById('body').clientHeight))
                                  clearInterval(m);
                                                        }
var m = setInterval(moveByLine,20);
</script>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 20.05.2013, 09:58
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

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

всего делов-то.
Ответить с цитированием
  #3 (permalink)  
Старый 20.05.2013, 11:35
Новичок на форуме
Отправить личное сообщение для ATNC Посмотреть профиль Найти все сообщения от ATNC
 
Регистрация: 10.04.2013
Сообщений: 4

Спасибо. Скажите, пожалуйста, а как сделать верхнюю и левую границу?
Ответить с цитированием
  #4 (permalink)  
Старый 20.05.2013, 11:56
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

"вот зануда, проще дать чем объяснить почему не хочу"

вот держи код.
набросал на коленке по-быстрому. без учёта ресайза окна и прочего.
<html>
<body id="body">
<span id="move-me" style="position: absolute; border: 1px dashed black;">i like to move it</span>
<script type="text/javascript">
	var DELTA_X = 10,	// дельта изменений по горизонтали
		DELTA_Y = 10,	// дельта изменений по вертикали
		INTERVAL = 20,	// интервал в миллисекундах перерисовки элемента
		bodyWidth = document.getElementById('body').clientWidth,
		bodyHeight = document.getElementById('body').clientHeight,
		el = document.getElementById('move-me'),	
		elW = el.clientWidth,
		elH = el.clientHeight,
		elTop = 100,	// начальная координата элемента по горизонтали
		elLeft = 50,	// начальная координата элемента по вертикали
		toRight = true,
		toBottom = false;

	function setElCoords(e, x, y) {
		e.style.left = x + 'px';
		e.style.top = y + 'px';
	}

	setInterval(function () {
		elLeft = elLeft + (toRight ? DELTA_X : -DELTA_X);
		elTop = elTop + (toBottom ? DELTA_Y : -DELTA_Y);
		setElCoords(el, elLeft, elTop);
		
		if ((elLeft + elW >= bodyWidth) || (elLeft <= 0)) {
			toRight = !toRight;
		}
		if ((elTop +elH >= bodyHeight) || (elTop <= 0)) {
			toBottom = !toBottom;
		}	
	}, INTERVAL);	
</script>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
Отследить клик по дочернему объекту AllanZ jQuery 3 05.09.2012 12:38
Выравнять три дива в одной строке debugx (X)HTML/CSS 9 06.10.2011 12:03
Вопрос по относительному позиционированию DIV XPOMOB (X)HTML/CSS 11 15.07.2009 17:02