Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   this.element.style выдаёт ошибку (https://javascript.ru/forum/misc/21655-element-style-vydajot-oshibku.html)

Gasheck 19.09.2011 14:48

this.element.style выдаёт ошибку
 
this.animation = function () {
	if(this.i==true) {
	this.over=false;
	this.start = new Date().getTime();
	}
	this.i=false;
	var now = (new Date().getTime()) - this.start; // Текущее время
	var progress = now / this.duration; // Прогресс анимации
	var result = (this.to - this.from) * Math.pow(progress,2) + this.from;
	this.element.style.left = result + "px";
	if (progress < 1) // Если анимация не закончилась, продолжаем
    setTimeout(arguments.callee, 1);
	else {
		this.j=true;
		this.globalResult = result;
		this.out = true;
		if(this.outFlag==true)
		VerifyingFlagOut();
		}

в этом методе происходит ошибка при попытке присвоить значение this.element.style.left

переменной element я присваиваю значение путём передачи параметра при создании объекта. В чём может быть причина ошибки? Причём если присвоить какое-то конкретное число, то всё работает, но только в течении одной итерации. И ошибку все равно выдаёт.

FINoM 20.09.2011 05:54

Ок. Какая ошибка? Что содержит result на итерации с ошибкой?

Gasheck 20.09.2011 13:03

на итерации с ошибкой result содержит обыкновенное числовое значение и px, например, 2px. в значениях там порядок, проблема в другом...
window.onload = loadData;
	function loadData(element) {
	this.element=element;
	this.i=true;
	this.start = 0;
	this.from = 0; // Начальная координата X
	this.to = 15; // Конечная координата X
	this.duration = 300; // Длительность
		this.animation = function () {
		if(this.i==true) {
		this.start = new Date().getTime(); //время старта анимации
		}
		this.i=false;
		var now = (new Date().getTime()) - this.start; // Текущее время
		var progress = now / this.duration; // Прогресс анимации
		var result = (this.to - this.from) * Math.pow(progress,2) + this.from;
		this.element.style.left = result + "px";
		if (progress < 1) // Если анимация не закончилась, продолжаем
		setTimeout(this.animation, 1);
		}
	}
	function createFacebookObject() {
		var a = document.getElementById("facebook");
		var facebook = new loadData(a);
		facebook.animation();
}


<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="Untitled-6.js" language="javascript"/> </script>
</head>
<body>
<img id="facebook" onClick="createFacebookObject()" style="position:absolute; left:0px" src="../img/Facebook.png"/>
</body>
</html>

Чтоб легче отслеживать ошибки, лучше закоментировать if (progress < 1).
Я упростил код, чтоб было легче и нагляднее. Этот код по прежнему выдаёт ошибку, что типа невозможно присвоить значение к this.element.style.left . Я пользовался FireBug и заметил такую вещь, что эта ошибка выскакивает на второй итерации... и после прохождения первой итерации, переменная element перестаёт иметь свойство style. Тупо теряется куда-то... Я так понимаю, что проблема в setTimeOut, так как в обычном цикле всё работает как часы и структура переменных не меняется. И еще, вроде, if(this.i==true) тут до лампочки и время старта постоянно берется в каждой итерации новое. Мне надо, чтоб элемент facebook двигался при клике мышки вправо.
Кстати, эта вся красота работает, если не использовать "классы" и объекты. Но мне надо именно так..., чтоб я мог привязать этот код к множеству элементов, путём создания каждому своего объекта.


Часовой пояс GMT +3, время: 04:44.