我无法解决导致IE8忽略这些观察者的原因。它适用于FF,Chrome(10)和Safari。它永远不会达到IE8开发人员工具中设置的断点。
<script type="text/javascript">
//<![CDATA[
var timeoutHolder = null;
function displayZoom(id){
window.clearTimeout(timeoutHolder); //if we are coming from another hover target, prevent the opacity reset
if($('mini-main').getOpacity()!=0.4)
new Effect.Opacity('mini-main',{from:1.0,to:0.4,duration:0.5});
new Effect.Appear(id,{duration:0.3});
}
function resetZoom(id){
timeoutHolder = window.setTimeout(function(){
new Effect.Opacity('mini-main',{from:0.4,to:1.0,duration:0.5});
}, 100); //gives us 100 ms for user to move onto another target before we reset the opacity
new Effect.Fade(id,{duration:0.5});
}
$$('.mini-target').each(function(target_div){
target_div.observe('mouseover',function(){
displayZoom(target_div.id+'-hover');
});
target_div.observe('mouseout',function(){
resetZoom(target_div.id+'-hover');
});
});
//]]>
</script>
关联的phtml是:
<img src="<?php echo Mage::getBaseUrl('media').'Main.jpg'?>" id="mini-main"/>
<div id="mini-target-1" class="mini-target"></div>
<div id="mini-target-2" class="mini-target"></div>
<div id="mini-target-3" class="mini-target"></div>
<div id="mini-target-4" class="mini-target"></div>
<div id="mini-target-1-hover" class="mini-hover" style="display:none">
<img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-1.png'?>"/>
</div>
<div id="mini-target-2-hover" class="mini-hover" style="display:none">
<img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-2.png'?>"/>
</div>
<div id="mini-target-3-hover" class="mini-hover" style="display:none">
<img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-3.png'?>"/>
</div>
<div id="mini-target-4-hover" class="mini-hover" style="display:none">
<img src="<?php echo Mage::getBaseUrl('media').'mini-rollover-4.png'?>"/>
</div>
我也试过单独附加观察者(没有each
),但这没有任何区别:
$('mini-target-2').observe('mouseover',function(){
displayZoom('mini-target-2-hover');
});
$('mini-target-2').observe('mouseout',function(){
resetZoom('mini-target-2-hover');
});
谢谢,
JD
答案 0 :(得分:2)
最黑客的黑客攻击。如果您在mini-target
div上设置背景,它就有效。我最终使用条件setStyle for IE来显示spacer gif。 1998浏览器黑客FTW !!!
if(Prototype.Browser.IE){
target_div.setStyle({background: 'url("<?php echo Mage::getBaseUrl('media').'spacer.gif'?>")'});
}
如果有人能解释为什么IE需要背景来解雇观察者,我很乐意接受他们的回答......可能与hasLayout有关吗?
答案 1 :(得分:2)
我之前有一个案例,其中一组ID名称在IE中引起了Javascript问题。
该方案由连字符-
后的数字组成。
尝试删除号码前的连字符。将mini-target-1
更改为mini-target1
?
答案 2 :(得分:1)
如果你改变了你的方式,那会怎么样:
$(document).ready(function () {
$('.mini-target').mouseover(function () {
displayZoom($(this).attr("id") + '-hover');
}).mouseout(function () {
resetZoom($(this).attr("id") + '-hover');
});
});
当您将鼠标移到鼠标悬停时,您仍然会引用每个“迷你目标”。
这将在IE8中运行。
干杯, 人
答案 3 :(得分:1)
当observe
没有触发隐藏元素时,我遇到了这个问题。我必须做的就是在使用display:block;
之前制作该元素observe
。
如果您的元素最初设置为display:none;
,那么当您更改背景图片时,IE8(及以下)可能会自动将css显示属性更改为block
。