2014-10-21 3 views
1

Я довольно новичок в JS. Я создал html-страницу и хочу включить слайдер изображения. он должен быть автоматическим. Я сделал некоторое кодирование, и когда я проверяю консоль, ее запуск, но изображение меняется. , и когда я получаю этот элемент с помощью «getElementById()», он говорит: «sld» имеет значение null, (строка7), то есть «sld.src = eval (« img »+ step +». Src »)» является нулевым, они говорят , Где я делаю это неправильно.Простой слайд изображений JavaScript без предварительного массива

JS - HTML

<script type="text/javascript"> 
     var img1 = new Image(); 
     img1.src="slide_show/1.jpg"; 
     var img2 = new Image(); 
     img1.src="slide_show/2.jpg"; 
     var img3 = new Image(); 
     img1.src="slide_show/3.jpg"; 
     var img4 = new Image(); 
     img1.src="slide_show/4.jpg"; 

    </script> 

JS

var step = 2; 
function slideit() 
{ 
    console.log("i'm called"); 
    console.log(step); 
    var sld = document.getElementsByName("sli"); 
    sld.src = eval("img" + step + ".src"); 
    if (step < 3) { 
     console.log("for loop"); 
     step++; 
    } 
    else{ 
     step = 1; 
    } 
    console.log("timeout"); 
    setTimeout("slideit()", 250); 
} 

HTML

<div id="main_section"> 
<img name="sli" src="slideShow/1.1.jpg" id="slide_show"/> 
</div> 

ответ

1

Есть несколько исправлений, необходимых в вашем коде

  • Нет необходимости создавать массив изображения, и вы можете просто хранить значения в простом массиве строк.
  • Не нужно использовать document.getElementsByName, но вместо этого вы можете использовать document.getElementById. Передайте идентификатор тега изображения.
  • Обратите внимание, что вам также необходимо изменить вызов setTimeout.

Исправленный код будет выглядеть так

var img = ["slide_show/1.jpg", "slide_show/2.jpg", "slide_show/3.jpg", "slide_show/4.jpg"]; 

Меняйте JS для

var step = 2; 
function slideit() 
{ 
    console.log("i'm called"); 
    console.log(step); 
    var sld = document.getElementsById("sli"); 
    sld.src = img[step]; 
    if (step < 3) { 
     console.log("for loop"); 
     step++; 
    } 
    else{ 
     step = 1; 
    } 
    console.log("timeout"); 
    setTimeout(slideit, 250); 
} 
+0

хорошо, я хочу знать, почему Eval() функция не работало? использование массива хорошо, но вы можете исправить его так, как я намеревался, одну переменную для каждого изображения и использовать функцию eval(). и я использовал «getElementById (« slide_show »)», но возникает ошибка, говоря, что «sld» имеет значение null –

+0

Hi River, вы сказали, что не хотите использовать функцию предварительной загрузки. Используя объект Image, вы делаете обратное. Eval должен работать в вашем случае, но присваивание переменной sld приведет к массиву, а не к скалярной переменной. Если вы получаете его как нуль, то вам нужно проверить, когда ваш сценарий будет запущен? Это до инициализации дерева DOM или после него. Лучше вызвать функцию слайда после готовности дерева DOM. Подсказка: используйте document.onreadystatechange https://developer.mozilla.org/en-US/docs/Web/API/document.readyState – CuriousMind

+0

TypeError: sld is null –

Смежные вопросы