【问题标题】:Javascript image scroller not working with DOCTYPEJavascript 图像滚动条不适用于 DOCTYPE
【发布时间】:2009-07-09 21:12:29
【问题描述】:

我一直在网上搜索一些 javascript 代码,这些代码允许我在网页上不间断地自动滚动图像。经过长时间的搜索,我终于找到了一个足够接近的东西。然后,我尽可能地对其进行了定制,以使其完全按照我的意愿去做。

这个测试是在一个没有 DOCTYPE 的页面上完成的,所以当我把它移到一个有 DOCTYPE 的页面上时,javascript 搞砸了并且拒绝滚动。它只显示了一个静止图像(在 safari 和 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>');
};

【问题讨论】:

    标签: javascript html image scroll doctype


    【解决方案1】:

    在 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

    【讨论】:

    • 是的!它终于奏效了。非常感谢朋友,你太棒了。我只是将相关文件上传到服务器来尝试修复这个问题,所以我没有费心上传menu.js和prettyPhoto.js。再次感谢队友,你是最好的。
    【解决方案2】:

    可能的原因是代码最后一行的属性没有引号:

    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 中添加分号。

    最后,使用库来完成所有这些工作并获得更多睡眠。

    【讨论】:

    • Lol欢呼Triptych,我做了上述修改,但javascript仍然无法滚动。我对库不是很好,您会建议执行相同功能的任何特定库吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 2021-09-26
    • 2020-12-23
    • 2018-10-19
    • 1970-01-01
    相关资源
    最近更新 更多