Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.06.2014, 17:01
Аспирант
Отправить личное сообщение для free_style Посмотреть профиль Найти все сообщения от free_style
 
Регистрация: 01.07.2010
Сообщений: 36

Свойство transition или как переместить div c точки А в точку Б?
1. Задача следующая, нужно чтобы черный прямоугольник(korobka2) начинал свое движение с места белого прямоугольника (korobka) и следовал при нажатии на фон за курсором. А он с сожалению вылетает из (top:0; left:0.

2. А вторая задача, при остановке черный прямоугольник(korobka2) вновь превращался в белый прямоугольник (korobka).

Вот пример: http://troinfo.ru/000/primer.html

<html>
<head>
<script type="text/javascript" src="core_engine/scriptjava.js"></script>
<script type="text/javascript" src="core_engine/cartoon_background.js"></script>
<script type="text/javascript" src="core_engine/cartoon_rubin.js"></script>
<script type="text/javascript" src="core_engine/cartoon_background2.js"></script>
</head>
<body onmousemove="mouseShowHandler(event);">
	
	
	<style>
		.korobka {
			position: absolute;
			top: 85;
			left: 240;
			opacity: 1;
		}
		
		.korobka2 {
			position: absolute;
			top: 0;
			left: 0;
			opacity: 0;
			transition: left 3s cubic-bezier(0.0,0.5,0.5,1.0), top 3s cubic-bezier(0.0,0.5,0.5,1.0);
		}
		
		.fon {
			position: absolute;
			top: 0;
			left: 0;
		}
		
		.input_c {
			position: absolute;
			top: 300;
		}
		
		.input_c2 {
			position: absolute;
			top: 350;
		}
	</style>

		
	<div class="fon"><img width="640" height="190" src="fon.jpg" onclick="funkcia(event)"></div>
	<div id="korobkaid" class="korobka"><img width="160" height="20" src="box.jpg"></div>
	<div id="korobka2id" class="korobka2"><img width="160" height="20" src="box2.jpg"></div>
	
	<div class="input_c"><input type="text" id="mouseX"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="text" id="mouseY"></div>
	<div class="input_c2"><input type="text" id="divX" value=""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="text" id="divY" value=""></div>
	
<script>
	
	
	function getOffsetSum(elem) {          // Определяем положение DIV (более простой вариант который работает во многих браузерах)
		var top=0, left=0
		while(elem) {
			top = top + parseFloat(elem.offsetTop)
			left = left + parseFloat(elem.offsetLeft)
			elem = elem.offsetParent        
		}	
		
		document.getElementById('divY').value = top;
		document.getElementById('divX').value = left;
		
		return {top: Math.round(top), left: Math.round(left)}
	}

	
	
	function getOffsetRect(elem) {          // Определяем положение DIV
		// (1)
		var box = elem.getBoundingClientRect();
		
		// (2)
		var body = document.body;
		var docElem = document.documentElement;
		
		// (3)
		var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
		var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
		
		// (4)
		var clientTop = docElem.clientTop || body.clientTop || 0;
		var clientLeft = docElem.clientLeft || body.clientLeft || 0;
		
		// (5)
		var top  = box.top +  scrollTop - clientTop;
		var left = box.left + scrollLeft - clientLeft;
		
		document.getElementById('divY').value = top;
		document.getElementById('divX').value = left;
		
		return { top: Math.round(top), left: Math.round(left) };
	}
	
	
	function getOffset(elem) {
		if (elem.getBoundingClientRect) {
			// "правильный" вариант
			return getOffsetRect(elem)
		} else {
			// пусть работает хоть как-то
			return getOffsetSum(elem)
		}
	}

	
	
	
	
	function mouseShowHandler(e){            // Определяем положение мышки
		e = e || window.event;
		
		if (e.pageX == null && e.clientX != null ) { 
			var html = document.documentElement;
			var body = document.body;
			
			e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
			e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
		}
		
		document.getElementById('mouseX').value = e.pageX;
		document.getElementById('mouseY').value = e.pageY;
		
		var top2 = e.pageX;
		var left2 = e.pageY;
		
		return { top2: e.pageY, left2: e.pageX };
	}
	
	
	function funkcia(event){
		var a=this.getOffset(korobkaid);
		var b=this.mouseShowHandler(event);    
		
		// здесь требуется, чтобы korobka2id не с нулевых координат (top:0; left:0;) двигалась, 
		// а начинала свое движение с месте где расположен белый блок(korobkaid) и в сторону курсора
		
		
		//присваеваем новые координаты белому квадрату
		korobka2id.style.top = a.top;
		korobka2id.style.left = a.left;
		document.querySelector('.korobka2').style.opacity = 1;
		
		document.querySelector('.korobka').style.transition = 'opacity 0s';  // исчезновение белого блока
		document.querySelector('.korobka').style.opacity = 0;
		
		// двигаемся за курсором мыши
		document.querySelector('.korobka2').style.left = b.left2 - 80;  // где 80 половина длины korobka2
		document.querySelector('.korobka2').style.top = b.top2 - 10;  // где 10 половина высоты korobka2
		
		korobka2_id.addEventListener('transitionend', funkcia2, true); /* на будущее */
	}
	
	
	function funkcia2(){  // здесь требуется по прекращению движения белого квадрата(korobka2id), 
	                      //чтобы он превращался в черный(korobkaid)
		var div2=this.getOffsetRect(korobka2id);
		
		document.querySelector('.korobka').style.transition = 'opacity 0s';
		document.querySelector('.korobka').style.opacity = 1;
		document.querySelector('.korobka').style.top = div2.top;
		document.querySelector('.korobka').style.left = div2.left;
		document.querySelector('.korobka2').style.opacity = 0;
	}
</script>

	
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по replace. Как заменить все точки в строке? Pluto Общие вопросы Javascript 14 21.04.2017 12:32
30(1|2) редирект от сервера. Или как лучше сделать редирект при верной отсылке форма. pizzZ AJAX и COMET 2 18.02.2010 09:06
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 09.02.2010 00:00
Как убрать выделение в Опере у div, получившего фокус ? spa_2002 Opera, Safari и др. 5 03.09.2009 10:42
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25