如何更新图像的来源

时间:2011-02-21 16:22:58

标签: javascript image raphael

我正在使用RaphaëlJavascriptlib(顺便提一下SVG渲染的很棒的东西),我正在尝试在鼠标移过它时更新图像的来源。

事情是我找不到任何关于它的东西(它可能甚至不可能,考虑到我已经阅读了Raphaël的很大一部分来源而没有找到任何相关内容)。

有人知道这样做的方法吗? 也许可以在不直接使用Raphaël的API的情况下完成,但由于生成的DOM元素没有ID,我不知道如何手动更改其属性。

我实际上在做CoffeeScript,但它很容易理解。 CoffeeScript毕竟是Javascript。 这就是我所知道的,我希望MouseOver和MouseOut方法能够改变“bg”属性的来源。

class Avatar
  constructor: (father, pic, posx, posy) ->
    @bg = father.container.image "pics/avatar-bg.png", posx, posy, 112, 112
    @avatar = father.container.image pic, posx + 10, posy + 10, 92, 92
    mouseOver = => @MouseOver()
    mouseOut = => @MouseOut()
    @bg.mouseover mouseOver
    @bg.mouseout mouseOut

  MouseOver: ->
    @bg.src = "pics/avatar-bg-hovered.png"
    alert "Hover"


  MouseOut: ->
    @bg.src = "pics/avatar-bg.png"
    alert "Unhovered"

class Slider
  constructor: ->
    @container = Raphael "raphael", 320, 200
    @sliderTab = new Array()

  AddAvatar: (pic) ->
    @sliderTab.push new Avatar this, pic, 10, 10

window.onload = ->
  avatar = new Slider()
  avatar.AddAvatar "pics/daAvatar.png"

这实际上有效,除了“@ bg.src”部分:我写道它知道它不会起作用,但是很好......

3 个答案:

答案 0 :(得分:9)

var paper = Raphael("placeholder", 800, 600);
var c = paper.image("apple.png", 100, 100, 600, 400);
c.node.href.baseVal = "cherry.png"

我希望,你明白了。

答案 1 :(得分:7)

这适用于我(以及所有浏览器):

targetImg.attr({src: "http://newlocation/image.png"})

答案 2 :(得分:6)

我正在使用rmflow的答案,直到我开始在IE8及其下面为image.node.href.baseVal返回undefined。 IE8及以下版本确实看到了image.node.src,所以我写了函数getImgSrc,setImgSrc,所以我可以定位所有的浏览器。

function getImgSrc(targetImg) {
    if (targetImg.node.src) {
        return targetImg.node.src;
    } else {
        return targetImg.node.href.baseVal;
    }
}

function setImgSrc(targetImg, newSrc) {
    if (targetImg.node.src) {
        targetImg.node.src = newSrc;
    } else {
        targetImg.node.href.baseVal = newSrc;
    }
}