Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2012, 19:57
Интересующийся
Отправить личное сообщение для JavaScriptProgrammer Посмотреть профиль Найти все сообщения от JavaScriptProgrammer
 
Регистрация: 13.10.2012
Сообщений: 22

Почему моя функция не работает с другими DOM-элементами?
Хотел написать пользовательскую функцию printContent, которая делала бы анимацию для любой span. Однако запустив её несколько раз она не работает. А работает только если она в коде применяется только один раз? Почему, как её перенастроить? Подскажите, плиз.

<html>
<title></title>
<head>
<span id="span1"></span>
<span id="span2"></span>
</head>
<body>
<script src="script.js"></script>
<script>
printContent("span1", str);
//document.getElementById("span1").style.width = document.body.clientWidth;
printcontent("span2", str2);
</script>
</body>
</html>


// global variable to store content
var str = "Content1. Content1.Content1.Content1.Content1.Content1.Content1.Content1.Content1.";
var str2 = "Content2. Content2.Content2.Content2.Content2.Content2.Content2.Content2.Content2.Content2.Content2.";

// variable to store length of content
length = str.length;

// global variable to stop window method setInterval
var stop;

// global variable counter
var counter = 0;

// global variable to place content to the left
var left = 0;

// global font variable
var font = 0;

// global variable for borderTopColor

// global variables to store position values
var x = 0;
y = 0;

var a = 0;
var b = 0;
var c = 0;


var stopf = 0;
function printContentImplementation(span, string){
		
		var gs  = document.getElementById(span);

		gs.style.fontFamily = "Arial";
		gs.style.fontWeight = "Arial";
		gs.style.fontVariant = "small-caps";
		gs.style.position = "absolute";
		
		
		

		if(counter == string.length-1){
			gs.style.borderTop = "5px solid rgb(0,0,0)";
			gs.style.borderBottom = "1px solid rgb(0,0,0)";
			gs.style.backgroundColor = "rgb(255,255,255)";

			//gs.style.top = window.innerHeight - 100;	

			var stop2 = window.setInterval(

			function(){
	

			if(y == 100){

			window.clearInterval(stop2);
			stop2 = null;
			}			
			gs.style.top = y+"px";
			y++;
			
				
			}, 10





			);
			
			window.clearInterval(stop);
			stop = null;
			stopf = 1;

			
					
			
		}
				
		gs.innerHTML += string[counter];
		gs.style.color = "rgb(0,0,0)";
		gs.style.left = x+"px";		

		counter++;
		x++;
		
				
				
		
}


function printContent(span, string){

	if(stopf == 0){

       	stop = window.setInterval(
	function()
	{
	printContentImplementation(span, string)

	},
	10
);


}
}

Последний раз редактировалось JavaScriptProgrammer, 07.11.2012 в 20:42.
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2012, 20:12
Аватар для a_l
a_l a_l вне форума
Кандидат Javascript-наук
Отправить личное сообщение для a_l Посмотреть профиль Найти все сообщения от a_l
 
Регистрация: 15.09.2011
Сообщений: 143

Обнуляйте переменные высшего уровня или определяйте их внутри функции. После первого вызова это условие будет всегда выполняться:
if(y == 100)
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2012, 20:22
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Вы перменными не пробывали пользоваться?
к примеру так
var elem =  document.getElementById(span);
elem.style.fontFamily = "Arial";

что бы не нагружать браузер и не писать индуский код.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2012, 20:26
Интересующийся
Отправить личное сообщение для JavaScriptProgrammer Посмотреть профиль Найти все сообщения от JavaScriptProgrammer
 
Регистрация: 13.10.2012
Сообщений: 22

Как эту пользовательскую функцию исправить, так как она не работает больше одного раза; Покажите номер строки, которую надо исправить.
Ответить с цитированием
  #5 (permalink)  
Старый 07.11.2012, 20:29
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от JavaScriptProgrammer Посмотреть сообщение
Как эту пользовательскую функцию исправить, так как она не работает больше одного раза; Покажите номер строки, которую надо исправить.
Обнуляйте переменные в конце функции.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #6 (permalink)  
Старый 07.11.2012, 20:39
Интересующийся
Отправить личное сообщение для JavaScriptProgrammer Посмотреть профиль Найти все сообщения от JavaScriptProgrammer
 
Регистрация: 13.10.2012
Сообщений: 22

Отредактировал код. применил глобальную переменную для кода.

Вы говорите обнулять переменные в конце функции. Какие именно, сколько, номер строк. Покажите как. Please.
Ответить с цитированием
  #7 (permalink)  
Старый 07.11.2012, 20:43
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от JavaScriptProgrammer Посмотреть сообщение
Отредактировал код. применил глобальную переменную для кода.

Вы говорите обнулять переменные в конце функции. Какие именно, сколько, номер строк. Покажите как. Please.
сделайте проще, избавьтесь от глобальных переменных и перенисите их в функцию
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #8 (permalink)  
Старый 07.11.2012, 20:50
Интересующийся
Отправить личное сообщение для JavaScriptProgrammer Посмотреть профиль Найти все сообщения от JavaScriptProgrammer
 
Регистрация: 13.10.2012
Сообщений: 22

Всё равно не работает.
Ответить с цитированием
  #9 (permalink)  
Старый 07.11.2012, 20:53
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от JavaScriptProgrammer Посмотреть сообщение
Всё равно не работает.
код в студию.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #10 (permalink)  
Старый 07.11.2012, 21:07
Интересующийся
Отправить личное сообщение для JavaScriptProgrammer Посмотреть профиль Найти все сообщения от JavaScriptProgrammer
 
Регистрация: 13.10.2012
Сообщений: 22

// global variable to store content
var str = "Content1. Content1.Content1.Content1.Content1.Content1.Content1.Content1.Content1.";
var str2 = "Content2. Content2.Content2.Content2.Content2.Content2.Content2.Content2.Content2.Content2.Content2.";
 
// variable to store length of content
length = str.length;
 
// global variable to stop window method setInterval
var stop;
 
// global variable counter
var counter = 0;
 
// global variable to place content to the left
var left = 0;
 
// global font variable
var font = 0;
 
// global variable for borderTopColor
 
// global variables to store position values
var x = 0;
var y = 0;
 
var a = 0;
var b = 0;
var c = 0;
 
 
var stopf = 0;
function printContentImplementation(span, string){
         
        var gs  = document.getElementById(span);
 
        gs.style.fontFamily = "Arial";
        gs.style.fontWeight = "Arial";
        gs.style.fontVariant = "small-caps";
        gs.style.position = "absolute";
         
         
         
 
        if(counter == string.length-1){
            gs.style.borderTop = "5px solid rgb(0,0,0)";
            gs.style.borderBottom = "1px solid rgb(0,0,0)";
            gs.style.backgroundColor = "rgb(255,255,255)";
 
            //gs.style.top = window.innerHeight - 100; 
 
            var stop2 = window.setInterval(
 
            function(){
     
 
            if(y == 100){
 
            window.clearInterval(stop2);
            stop2 = null;
            y = 0;
            x = 0;
            left = 0;
            top = 0;
            counter = 0;
            font = 0;
            stop = 0;
            }          
            gs.style.top = y+"px";
            y++;
             
                 
            }, 10
 
 
 
 
 
            );
             
            window.clearInterval(stop);
            stop = 0;
            left = 0;
            stopf = 1;
             x = 0;
             y = 0;
            top = 0;
            counter = 0;
            font = 0;
           
 
             
                     
             
        }
                 
        gs.innerHTML += string[counter];
        gs.style.color = "rgb(0,0,0)";
        gs.style.left = x+"px";    
 
        counter++;
        x++;
         
                 
                 
         
}
 
 
function printContent(span, string){
 
    if(stopf == 0){
 
        stop = window.setInterval(
    function()
    {
    printContentImplementation(span, string)
 
    },
    10
);
 
 
}
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция не позволяет остаться элементу на странице. Почему? jsuse Общие вопросы Javascript 9 10.11.2011 10:49
Функция изменения DOM, нужно разобраться что и как fiw Общие вопросы Javascript 1 03.11.2011 08:43
Функция не работает без jQuery(function() { shilinpavel jQuery 1 26.10.2011 10:05
Почему не работает JS с подгруженными в DOM элементами? V-z-z-HobboT jQuery 6 30.03.2009 14:02
почему не работает <body onload=test()> Ichigeki Общие вопросы Javascript 11 29.10.2008 13:49