通过单击更改图像(JavaScript)

通过单击更改图像(JavaScript),javascript,dreamweaver,Javascript,Dreamweaver,所以,我正在为一个运动图形课程做一个项目,他们不教我们JavaScript,但让我们用JavaScript制作网页。我们被告知要使用DreamWeaver,这在大多数情况下都很有效,但我在一个函数上遇到了问题- 我希望能够在单击图像时多次更改图像。我将DW生成的代码放在下面,基本上我希望sun.png在单击时更改为whitedwarf.png,使用MM_swapImage()方法可以很好地工作。问题是我希望能够点击新的whitedwarf.png并将其更改为第三张图片(planet.png供好奇

所以,我正在为一个运动图形课程做一个项目,他们不教我们JavaScript,但让我们用JavaScript制作网页。我们被告知要使用DreamWeaver,这在大多数情况下都很有效,但我在一个函数上遇到了问题-

我希望能够在单击图像时多次更改图像。我将DW生成的代码放在下面,基本上我希望sun.png在单击时更改为whitedwarf.png,使用MM_swapImage()方法可以很好地工作。问题是我希望能够点击新的whitedwarf.png并将其更改为第三张图片(planet.png供好奇者使用)


无标题文件
身体{
左边距:100px;
边缘顶部:100px;
背景图像:url(Images/startile.gif);
}
函数MM_findObj(n,d){//v4.01
变量p,i,x;如果(!d)d=document;如果((p=n.indexOf(“?”)>0&&parent.frames.length){
d=parent.frames[n.substring(p+1)].document;n=n.substring(0,p);}

如果(!(x=d[n])&&d.all)x=d.all[n];对于(i=0;!x&&i如何将图像列表存储在一个数组中,然后在单击时切换图像元素的src,如下所示

i = 0
var images = ['Images/sun.png', 'Images/whitedwarf.png', 'Images/planet.png']
function MM_swapImage() {
 if(i >= images.length)
  {
    img = document.getElementById('Image1')
    img.setAttribute('onclick','')
    return

 }
 img = document.getElementById('Image1')
 img.setAttribute('src',images[i])
 i = i+1
}
使用Javascript

function onClickFunction(){

    var imageSRC = document.getElementById("Image1").src = "whitedwarf.png"
}

使用jQuery

function onClickFunction(){
    $("#Image1").attr("src", "whitedwarf.png");
}
“使用Dreamweaver”?对Dreamweaver的Phooey。你不需要在Dreamweaver中使用任何东西

从分组在
div
部分中的图像集合开始(如果您使用的是HTML5)
如果禁用CSS或Javascript,图像将正常显示,因此您仍然可以看到所有图像

<div id="imgs">
<img src="img.jpg" alt="My Image 1"/>
<img src="img2.jpg" alt="My Image 2"/>
</div>

然后,当页面加载时,隐藏除一个之外的所有图像,并将单击事件关联到每个图像以隐藏自身并显示下一个图像

var port_imgs, i;
    window.onload = function () {
            //get all the images in "#imgs"
        port_imgs = document.getElementById("imgs").getElementsByTagName("img");
           //loop through, hiding them all
        for (i = 0; i < port_imgs.length; i++) {
            port_imgs[i].style.display = "none";
                    //wire up the click event and do the magic
            port_imgs[i].onclick = (function (k) {
                var r = function () {
                    this.style.display = "none";
                    if (k >= port_imgs.length) { k = 0 }
                    port_imgs[k].style.display = "block";
                };
                return r;
            })(i+1);
        }
            //un-hide (display) the first image so we're all set to go
        port_imgs[0].style.display = "block";
    }
var-port\u imgs,i;
window.onload=函数(){
//获取“#imgs”中的所有图像
port_imgs=document.getElementById(“imgs”).getElementsByTagName(“img”);
//循环通过,把它们都藏起来
对于(i=0;i=port_imgs.length){k=0}
端口\ imgs[k].style.display=“block”;
};
返回r;
})(i+1);
}
//取消隐藏(显示)第一幅图像,这样我们就可以开始了
端口\u imgs[0]。style.display=“block”;
}

你可以在我的网站上看到一个活生生的例子,我使用了完全相同的东西。

这里是该功能的一个快速而肮脏的版本,人类实际上可以阅读:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <style type="text/css">
      body {
        margin-left: 100px;
        margin-top: 100px;
        background-image: url(Images/startile.gif);
      }
    </style>
    <script type="text/javascript">
    var Images = {
      library: ['Images/sun.png', 'Images/whitedwarf.png', 'Images/planet.png'],
      swap: function (element) {
        var elementSrc = element.src,
            i = 0,
            libLength = this.library.length,
            src = false;
        for(; i < libLength; i++) {
          src = this.library[i];
          if(src === elementSrc) {
            element.setAttribute('src', this.library[(i+1) % libLength]);
            break;
          }
        }
      }
    }
    </script>
   </head>

  <body>
    <img src="Images/sun.png" width="500" height="500" id="Image1" onclick="Images.swap(this)" />
  </body>
</html>

下面是一个更优雅的解决方案:

(函数(){
var Main={
图像:[],
idx:0,
fillArray:函数(arr){
if(arr的类型==“对象”){
if(阵列长度){
Main.images=Main.images.concat(arr);
}else Main.images.push(arr);
}否则{
if(arguments.length){
for(var i=0;i

使用
Main.fillArray(arr);
用图像填充数组,并使用
Main.changeImage(el,n);
其中
el
是其
src
将改变的图像元素,
n
是要跳过的图像数量(在您的情况下,3).

就像我说的,我们被指示使用DreamWeaver,而不是学习实际的语言,所以我使用我得到的语言。变量
parent
应该是什么?@David-这是
窗口。parent
属性:@patrikakerstran如果你不熟悉JS,情况会更糟。我会尝试清理一下。我收费我有一定的信心,我只需要修改MM_swapImage()以支持3个图像,而不是2个图像。我只是不知道怎么做,因为这段代码是由DreamWeaver编写的。我将尝试一下。看看它,我认为这将取代MM_swapImage()body?是的,如果替换函数并更改图像数组,它应该会工作如果我删除函数名后的I=0,它不会循环吗?(除了循环,我想禁用循环,这非常有效-非常感谢)如果不再循环,您也可以只返回if语句,但这样onclick函数将不再被调用。因此,我不怕看起来很愚蠢-这不会反复给我相同的图像吗?使用JS,我如何更改“whitedwarf.png”通过单击?是的!这是正确的。我只添加了更改它一次的代码。您可以像这样调整图像:function onClickFunction(){var imageSRC=document.getElementById(“Image1”).src;if(imageSRC==“sun.png”){imageSRC=“whitedwarf.png”}else{imageSRC=“sun.png”}所以,你将div标识为“images”,但数组似乎称为“imgs”。有什么区别吗?我感觉很像我漏掉了一块。确认,对不起。我的错,拼写错误。它被称为“portfolio”在我的网站上,这在这里没有意义,所以我更改了它,但我将它更改为两个不同的东西。编辑。我只是尝试了一下,它实际上加载了我的图像(其他建议的解决方案没有),但当我单击时,似乎什么都没有发生。还有什么我需要添加的吗?你检查过我输入的路径是否正确吗?
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <style type="text/css">
      body {
        margin-left: 100px;
        margin-top: 100px;
        background-image: url(Images/startile.gif);
      }
    </style>
    <script type="text/javascript">
    var Images = {
      library: ['Images/sun.png', 'Images/whitedwarf.png', 'Images/planet.png'],
      swap: function (element) {
        var elementSrc = element.src,
            i = 0,
            libLength = this.library.length,
            src = false;
        for(; i < libLength; i++) {
          src = this.library[i];
          if(src === elementSrc) {
            element.setAttribute('src', this.library[(i+1) % libLength]);
            break;
          }
        }
      }
    }
    </script>
   </head>

  <body>
    <img src="Images/sun.png" width="500" height="500" id="Image1" onclick="Images.swap(this)" />
  </body>
</html>
swap: function (element) {
    var elementSrc = element.src,
        i = 0,
        libLength = this.library.length,
        src = false;
    for(; i < libLength; i++) {
        src = this.library[i];
        if(src === elementSrc) {
            if((i+1) >= libLength) {
               element.onclick = false;
            }
            element.setAttribute('src', this.library[(i+1) % libLength]);
            break;
        }
    }
}
(function() {
    var Main = {
        images: [],
        idx: 0,

        fillArray: function(arr) {
            if (typeof arr == "object") {
                if (arr.length) {
                    Main.images = Main.images.concat(arr);
                } else Main.images.push(arr);
            } else {
                if (arguments.length) {
                    for (var i = 0; i < arguments.length; i++) {
                        Main.images.push(arguments[i]);
                    }
                } else return;
            }
        },
        changeImage: function(el, n) {
            el.src = Main.images[Main.idx];
            Main.idx += n;
        }
    };

    var a = [
        'http://bit.ly/sbK2Ub',
        'http://bit.ly/yYi5oQ',
        'http://bit.ly/4GjHJn'
    ];
    var b = document.getElementById('g'),
        c = document.getElementById('e');

    Main.fillArray(a);

    b.onclick = function() {
        Main.changeImage(c, 1);
    };
})();​