2011-09-08 152 views
3

我想达到什么:

我想当光标在图像上(鼠标)和第二被点击的图像时,首先发生的图像交换(鼠标点击)。jQuery的图片交换为鼠标悬停和鼠标按下

示例:

我有一个绿色箭头的图像。对于鼠标悬停,它会交换为黄色箭头的图像,点击后会交换棕色箭头的图像(但只要点击被保留)。默认的绿色箭头总是被恢复。

<img src="green-default.png" /> 
<img src="yellow-over.png" /> 
<img src="brown-mousedownclick.png" /> 

我已经试过什么:

我申请一个jQuery的图像交换,超过事件鼠标的工作原理:

https://github.com/tszming/jquery-swapimage

<script type="text/javascript"> 
jQuery.swapImage(".swapImage"); 
</script> 

<img src="green-default.png" class="swapImage {src: 'yellow-over.png'}" /> 

任何建议将是ap reciated。

接受的解决方案

Senad的解决方案(下),造成使用CSS代替的jQuery。链接元素被赋予一个类,它将其设置为被交换图像的维度中的块。这三幅图像作为背景图像应用于链接元素的默认悬停和活动状态。 Senad的解决方案和演示代码如下所示。

+0

你可以用cs做所有这些事情s,没有必要为jQuery –

+0

+1提供大量结构化的问题。 @Senad:悬停很简单(:悬停),但你会怎么做mousedown? – Wulf

+0

我的回答低于 –

回答

4

我会用CSS去

CSS

a.your_link_button_class { 
    background: url('green-default.png') no-repeat; 
    height: 20px; 
    width: 20px; 
    display: block; 
} 
a.your_link_button_class:HOVER { 
    background: url('yellow-over.png') no-repeat; 
} 
a.your_link_button_class:ACTIVE { 
    background: url('brown-mousedownclick.png') no-repeat; 
} 

HTML

<a class="your_link_button_class" href="#nothing"></a> 
如果你想指针光标,你可以通过CSS添加它

cursor: pointer;

这将是与类全部链接 “your_link_button_class”

和jQuery来防止链接动作

$(document).ready(function() { $('a.your_link_button_class').click(function() { return false; }); }); 
+0

谢谢Senad。这很好,是一个更简单的解决方案。 –

2

我会去与你的img元素preloading images using jquery,然后再结合hovermousedown,改变src属性正确的图像。

我会使用hover,因为它会处理mouseout以及mouseover

由于我使用mousedown我还会用mouseup来更改img。

UPDATE

您不必使用jquery为hover效果,你可以用CSS做。然后在mousedownmouseup更改css类以获得所需的效果。

+0

我能够使用Senad的CSS解决方案来处理这两个事件。关于通过jQuery进行图像预加载,是否不足以将图像加载到设置为显示的div元素中:无? –

+0

你可以做到这一点。问题是你正在把图像放在没有理由的dom里。如果某人在禁用CSS的情况下访问该页面,则会令他们感到困惑。请记住,您的网站应完全功能(理想情况下)与JavaScript和CSS禁用。 – Ali

+0

感谢您的建议。这说得通。页面末尾的一块随机图像确实会混淆用户。 –

1

绑定到mouseover/out和mousedown/up并保存状态,因此mouseout-event不会在鼠标按钮仍然关闭时移除棕色图标。然后调用一个函数并查看是否按下鼠标按钮或鼠标悬停在图标上。如果没有,请设置默认图像。

$('#img').mouseover(function() { 
    $(this).data('over',true); 
    updateImage($(this)); 
}).mousedown(function() { 
    $(this).data('down',true); 
    updateImage($(this)); 
}).mouseup(function() { 
    $(this).data('down',false); 
    updateImage($(this)); 
}).mouseout(function() { 
    $(this).data('over'false); 
    updateImage($(this)); 
}); 

function updateImage(elem) { 
    if (elem.data('down')) { 
     elem.attr('src','brown.png'); 
    } else if (elem.data('over')) { 
     elem.attr('src','yellow.png'); 
    } else { 
     elem.attr('src','green.png'); 
    } 
} 
+0

嘿,Wulf。我选择了CSS方法,因为它需要更少的编码。 –

1

可以使用hover方法,与mousedownmouseup事件一起,并简单地适当地改变图像的src属性:

$("#yourImageId").hover(function() { 
    $(this).attr("src", "yellow-over.png"); 
}, function() { 
    $(this).attr("src", "green-default.png"); 
}).mousedown(function() { 
    $(this).attr("src", "brown-mousedownclick.png"); 
}).mouseup(function() { 
    $(this).attr("src", "green-default.png"); 
}); 
+0

感谢示例代码,但由Senad提供的CSS方法似乎需要更少的代码。在这种特殊情况下,使用jQuery over CSS有什么好处? –