Javascript скроллер изображений не работает с DOCTYPE - PullRequest
0 голосов
/ 10 июля 2009

Я искал в сети какой-то код JavaScript, который позволяет мне автоматически непрерывно прокручивать изображения на веб-странице. После долгих поисков я наконец-то наткнулся на то, что было достаточно близко. Затем я настроил его как можно больше, чтобы он делал то, что хотел.

Это тестирование проводилось на странице без DOCTYPE, поэтому, когда я переместил ее на страницу с DOCTYPE, javascript испортился и отказался от прокрутки. Это только показало единственное неподвижное изображение (на сафари и firefox)

Я загрузил обе веб-страницы на свой сайт MobileMe, чтобы вы, ребята, могли посмотреть.

Страница без DOCTYPE: web.me.com / zubby

Страница с DOCTYPE: web.me.com / zubby / 2.html

JavaScript также подробно описан ниже. Я буду чрезвычайно благодарен, если кто-то может помочь мне с этим.

Я только загрузил соответствующие файлы, поэтому firebug, вероятно, будет жаловаться на несуществующие функции.

var pic = new Array();

function banner(name, width, link){
    this.name = name
    this.width = width
    this.link = link
   };

pic[0] = new banner('images/cellarpics/cellarbynightsmall.jpg',203,'images/cellarpics/cellarbynightsmall.jpg');
pic[1] = new banner('images/cellarpics/insidecellarnewsmall.jpg',203,'images/cellarpics/insidecellarnewsmall.jpg');
pic[2] = new banner('images/cellarpics/mainshotwebsmall.jpg',203,'images/cellarpics/mainshotwebsmall.jpg');
pic[3] = new banner('images/cellarpics/MicroCelllar2tileopensmall.jpg',203,'images/cellarpics/MicroCelllar2tileopensmall.jpg');
pic[4] = new banner('images/cellarpics/openmicrosmall.jpg',203,'images/cellarpics/openmicrosmall.jpg');
pic[5] = new banner('images/cellarpics/topopenweb1small.jpg',203,'images/cellarpics/topopenweb1small.jpg');
pic[6] = new banner('images/cellarpics/topweb2small.jpg',203,'images/cellarpics/topweb2small.jpg');
pic[7] = new banner('images/cellarpics/topwebclosed1small.jpg',203,'images/cellarpics/topwebclosed1small.jpg');
/*
pic[8] = new banner('http://www.sxc.hu/pic/s/d/da/da9l/290444_yellow_rose.jpg',102,'http://www.sxc.hu/pic/m/d/da/da9l/290444_yellow_rose.jpg')
*/

var speed = 10;

var kk = pic.length;
var ii;
var hhh;
var nnn;
var myInterval;
var myPause;
var mode = 0;


var imgArray = new Array(kk);
var myLeft = new Array(kk);

for (ii=0;ii<kk;ii++){
imgArray[ii] = new Image()
imgArray[ii].src = pic[ii].name
imgArray[ii].width = pic[ii].width

    hhh=0 
    for (nnn=0;nnn<ii;nnn++){
        hhh=hhh+pic[nnn].width
    };
    myLeft[ii] = hhh
};

function ready(){
    for (ii=0;ii<kk;ii++){ 
        if (document.images[ii].complete == false){
            return false    
            break
        };
    };
return true
};


function startScrolling(){
    if (ready() == true){       
        window.clearInterval(myPause)
        myInterval = setInterval("autoScroll()",speed)  
    };
};


function autoScroll(){
    for (ii=0;ii<kk;ii++){
        myLeft[ii] = myLeft[ii] - 1

    if (myLeft[ii] == -(pic[ii].width)){
        hhh = 0
        for (nnn=0;nnn<kk;nnn++){
            if (nnn!=ii){
                hhh = hhh + pic[nnn].width
            };      
        };
        myLeft[ii] =  hhh
    };


        document.images[ii].style.left = myLeft[ii]
    };
    mode = 1
};

function stop(){
    if (mode == 1){
        window.clearInterval(myInterval)
    };
    if (mode == 0){
        window.clearInterval(myPause)
    };  
};

function go(){
    if (mode == 1){
        myInterval = setInterval("autoScroll()",speed)
    };
    if (mode == 0){
        myPause = setInterval("startScrolling()",3000)
    };  
};

myPause = setInterval("startScrolling()",100)

for (ii=0;ii<kk;ii++){
document.write('<a href="' + pic[ii].link + '" target="_blank"><img style="height:131px;position:absolute;top:0;left:' + myLeft[ii]  + ';" src="' + pic[ii].name + '" onMouseOver="stop()" onMouseOut="go()" /></a>');
};

Ответы [ 2 ]

1 голос
/ 10 июля 2009

В IE это работает. Причина в том, что с doctype установка объявления css left работает иначе, кажется, что недостаточно только одного числа ... чтобы заставить его работать, в этой функции autoscroll ()

Изменение

document.images[ii].style.left = myLeft[ii]

до

document.images[ii].style.left = myLeft[ii] + "px"

Кроме того, два ваших скрипта не загружаются, menu.js и js / prettyPhoto.js

0 голосов
/ 10 июля 2009

Вероятная причина в том, что у вас нет кавычек вокруг атрибутов в последней строке вашего кода:

document.write('<a href = ' + pic[ii].link + 'target="_blank" ><img space=0 hspace=0 vspace=0 border=0 height=131 style=position:absolute;top:0;left:0' + myLeft[ii]  + '; src=' + pic[ii].name + ' onMouseOver=stop() onMouseOut=go()></a>')

document.write('<a href="' + pic[ii].link + '" target="_blank"><img style="height:131px;position:absolute;top:0;left:' + myLeft[ii]  + ';" src="' + pic[ii].name + '" onMouseOver="stop()" onMouseOut="go()" /></a>');

Кроме того, я настоятельно советую вам добавить точку с запятой в ваш Javascript.

Наконец, используйте библиотеку, чтобы сделать все это и больше спать.

...