Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Скрипт меняющихся картинок из внешнего js-файла (https://javascript.ru/forum/css-html/6352-skript-menyayushhikhsya-kartinok-iz-vneshnego-js-fajjla.html)

baskerville 25.11.2009 11:23

Скрипт меняющихся картинок из внешнего js-файла
 
Есть скрипт меняющихся картинок.

<script>
        function RandomNumber(d) {
           return Math.floor((d+1)*Math.random());
        }        
    var images = new Array("img/01.jpg","img/02.jpg","img/03.jpg");

    function RandomGraphics() {
        document.write("<img src='"+images[RandomNumber(images.length-1)]+"' align=center hspace=10></a>");   
    }
RandomGraphics();
</script>


Это прописывание почему-то не даёт эффекта и ничего соответственно не подгружается:

<script type="text/javascript" src="script.js"></script>


Как заставить этот скрипт работать из внешнего js-файла?

baskerville 26.11.2009 14:15

Люди, ну отпишитесь кто-нибудь? Помогите.

Kolyaj 26.11.2009 15:00

Теги script во внешних файлах не нужны.

baskerville 26.11.2009 15:45

Kolyaj, нереальное спасибо. Работает!

GhostWolf 21.12.2009 21:40

У меня похожая тема. Объясните пожалуйста, где баг.

Код:

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">

var images=new Array(new image(), new image(), new image(), new image());
images[0].src="0.gif"
images[1].src="1.gif"
images[2].src="2.gif"
images[3].src="3.gif"

function getRandom(min, max)
{
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

function rotate(){
 d0=getRandom(0,3);
 document.i0.src=document.images[d0].src
 do {
  d1=getRandom(0,3);
  document.i1.src=document.images[d1].src
 }while (d0==d1)
 
 do {
  d2=getRandom(0,3);
  document.i2.src=document.images[d2].src
 }while ((d0==d2)||(d1==d2))
 
  do {
  d3=getRandom(0,3);
  document.i3.src=document.images[d3].src
 }while ((d0==d3)||(d1==d3)||(d2==d3))
 
 alert(d0+"  "+d1+"  "+d2+"  "+d3);

}

 </script>
 <p><img name=i0 onclick="rotate()" src="0.gif"><img name=i1 onclick="rotate()" src="1.gif"></p>
 <p><img name=i2 onclick="rotate()" src="2.gif"><img name=i3 onclick="rotate()" src="3.gif"></p>
 <input type="button" value="rotate" onClick="rotate()">
</HEAD>
</HTML>

Генератор работает исправно, но картинки меняются совершенно непредсказуемо. Мне необходимо, чтобы они случайно тасовались, но не повторялись.

PeaceCoder 21.12.2009 22:44

Цитата:

Сообщение от GhostWolf
Мне необходимо, чтобы они случайно тасовались, но не повторялись.

была такая тема. Ссылка

GhostWolf 22.12.2009 08:26

Фишка не в реализации алгоритма. Генератор случайных исправно выдает результаты (о чем сообщает блок Alert) Фишка в том, что картинки назначаются по непонятным мне закономерностям, часто игнорируя результат рандома.
В этом можно убедится, если запустить страницу с 4я разными картинками.

Единственная закономерность, которую я обнаружил при работе лишь с одной картинкой: она меняется на любую, исключая ту, что была в начале. Замена имени, а так же ввод дополнительных картинок к результату не приводят, либо скрипт и вовсе отказывается работать.
Просьба: человек, разбирающийся в JS, найдите баг, пожалуйста. Мне еще туеву хучу лаб делать, а осталась неделя =)

PeaceCoder 22.12.2009 19:31

просто ппц лентяи вы все аж помогать не хочется.
function rotate(){

var a=[],i;
for(i=0;i<4;i++) {
  a.push(images.splice(Math.rand()*images.length,1));
  document['i'+i].src=a[i].src;
  }
images = a;
}

GhostWolf 22.12.2009 22:35

PeaceCoder, зря вы про лень. Я честно старался два вечера. Ну не знаю я JS (справочник смотрел, но во времени я ограничен и начинать с hello world и т.д. уже поздно) и отладчика к нему нема. В этом плане в ассемблере и то приятней писать.
Спасибо за строчку
document['i'+i].src=a[i].src;


Я так понял, по логике, частным ее случаем будет
document[i2].src="0.gif"

И этот случай должен работать по-любому. Просто у меня опять ничего не работает:haha: Может руки кривые. Вы не ругайтесь, я не волшебник, я только учусь. У нас препод на любой вопрос отвечает: там все написано. Вот и пляши как хочешь

PeaceCoder 22.12.2009 22:45

Цитата:

Сообщение от GhostWolf
Я так понял, по логике, частным ее случаем будет

частным случаем будет document.iN.src = a[N].src

GhostWolf 22.12.2009 23:49

Это как раз еще более общий случай. По поводу отладчика я погорячился. Я пользовал только SciTE. Все-таки установил FireFox & FireBug. Буду разбираться

GhostWolf 23.12.2009 18:20

Все. Сделал по-своему:
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript"> 

var images=new Array(new Image(), new Image(), new Image(), new Image()); 
images[0]="0.gif"
images[1]="1.gif"
images[2]="2.gif"
images[3]="3.gif"

function getRandom(min, max)
{
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

function rotate(){
document.close();

var d0,d1,d2,d3;
 d0=getRandom(0,3);
 document.write("<img  onClick=rotate()  src='"+images[d0]+"' </img>")
 
 do {
  d1=getRandom(0,3);
 }while (d0==d1)
   document.write("<img onClick=rotate() src='"+images[d1]+"'</img>"+"<BR>")
 
 do {
  d2=getRandom(0,3);
 }while ((d0==d2)||(d1==d2))
    document.write("<img onClick=rotate() src='"+images[d2]+"'</img>")

 
  do {
  d3=getRandom(0,3);
 }while ((d0==d3)||(d1==d3)||(d2==d3))
    document.write("<img onClick=rotate() src='"+images[d3]+"'</img>")

}


 </script>

 <input type="button" value="rotate" onClick="rotate()"
</HEAD>
</HTML>


За помощь - спасибо

uli4ka 26.01.2010 23:21

Пожалуйста помогите! Написала JavaScript на увеличение картинок. Все отлично работает и открывает картинки, только в програме Start Denwer. Только загружаю все это дело на сайт, а там картинки не грузятся ни в ИЕ, ни в опере и т.п.

Gvozd 26.01.2010 23:41

Цитата:

Сообщение от uli4ka
програме Start Denwer

убил бы за такое
программа называется Denwer. Без Start
Если вы не можете назвать правильно свой основной рабочий инструмент, то может вам не стоит заниматься веб-программированием?
Цитата:

Сообщение от uli4ka
Только загружаю все это дело на сайт, а там картинки не грузятся ни в ИЕ, ни в опере и т.п.

телепаты в отпуске
адрес сайта в студию
[telepatemode]
наверно они не грузятся потому что там где браузер из пытается найти просто нету?
скорее всего вы просто напутали с относительными и абсолютными путями
[/telepatemode]
PS для несвязанных между собой вопросов надо создавать отдельные темы. будьте любезны


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