Javascript和AJAX:浮动光标旁边的图像 - 问题

时间:2011-06-18 02:46:39

标签: javascript ajax image floating

我有一个javascript代码会使鼠标指针旁边出现一个浮动图像(并且通过使用php它显示了mosue正在悬停的图像,但是因为页面上的图像本身是大小一点)。但如果图像位于页面左侧,则可以正常显示,如果图像位于右侧,则会出现问题。

代码:

<script>
var cX = 0; var cY = 0; var rX = 0; var rY = 0;
function UpdateCursorPosition(e){ cX = e.pageX; cY = e.pageY;}
function UpdateCursorPositionDocAll(e){ cX = event.clientX; cY = event.clientY;}
if(document.all) { document.onmousemove = UpdateCursorPositionDocAll; }
else { document.onmousemove = UpdateCursorPosition; }
function AssignPosition(d) {
if(self.pageYOffset) {
rX = self.pageXOffset;
rY = self.pageYOffset;
}
else if(document.documentElement && document.documentElement.scrollTop) {
rX = document.documentElement.scrollLeft;
rY = document.documentElement.scrollTop;
}
else if(document.body) {
rX = document.body.scrollLeft;
rY = document.body.scrollTop;
}
if(document.all) {
cX += rX; 
cY += rY;
}
d.style.left = (cX+10) + "px";
d.style.top = (cY+10) + "px";
}
function HideContent(d) {
if(d.length < 1) { return; }
document.getElementById(d).style.display = "none";
}
function ShowContent(d,i) {
if(d.length < 1) { return; }
var dd = document.getElementById(d);
AssignPosition(dd);
dd.style.display = "block";
$(d).setHTML ('<img src="'+i'" />');
}
function ReverseContentDisplay(d) {
if(d.length < 1) { return; }
var dd = document.getElementById(d);
AssignPosition(dd);
if(dd.style.display == "none") { dd.style.display = "block"; }
else { dd.style.display = "none"; }
}
//-->
</script>

这是一个触发浮动内容的标准图片:

<a onmousemove="ShowContent('FloatingImage','image.jpg'); return true;" onmouseover="ShowContent('FloatingImage','image.jpg'); return true;" onmouseout="HideContent('FloatingImage','image.jpg'); return true;" href="javascript:ShowContent('FloatingImage','image.jpg')">standard html</a>

<div 
   id="FloatingImage" 
   style="display:none; 
      position:absolute; 
      border-style: solid; 
      background-color: white; 
      padding: 5px;
      z-index:+1">
<img id="MouseImage" name="MouseImage" src="LR-10.jpg" />
</div>

--end code--

....就其自身而言这很好并且有效。因为您可以将鼠标悬停在下一个缩略图图像上,浮动图像会相应更改,同时保持纵横比。但是如果缩略图图像位于右侧,则浮动图像位于屏幕右侧边缘并且无法看到:是否有任何方法可以在JS代码中放置“块”,以便缩略图图像是靠近内容边缘(包含DV图层的屏幕边缘或边缘)而不是显示鼠标指针左侧的图像?

下一个问题:如果我自己打开页面,这段代码工作正常 - 但我的网站设计将通过AJAX调用页面在DIV层内打开。这打破了代码,然后它不起作用。这与我编写的其他脚本一起发生:单独工作正常,但通过AJAX加载请求输入并且失败。怎么解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:1)

我修改了你的脚本,以便当鼠标离右边太远时图像会切换到左边:

var cX = 0, cY = 0, rX = 0, rY = 0, vW;
function UpdateCursorPosition(e) { cX = e.pageX; cY = e.pageY; }
function UpdateCursorPositionDocAll(e) { cX = event.clientX; cY = event.clientY; }

if (document.all) { document.onmousemove = UpdateCursorPositionDocAll; }
else { document.onmousemove = UpdateCursorPosition; }

function AssignPosition(d) {
    if (self.pageYOffset) {
        rX = self.pageXOffset;
        rY = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
        rX = document.documentElement.scrollLeft;
        rY = document.documentElement.scrollTop;
    } else if (document.body) {
        rX = document.body.scrollLeft;
        rY = document.body.scrollTop;
    }
    if (document.all) {
        cX += rX; 
        cY += rY;
    }
    var oW = d.offsetWidth;
    if (cX + 10 + oW > vW) d.style.left = (cX - 10 - oW) + 'px';
    else d.style.left = (cX+10) + 'px';
    d.style.top = (cY+10) + 'px';
}
function HideContent(d) {
    if (d.length < 1) return;
    document.getElementById(d).style.display = 'none';
}
function ShowContent(d,i) {
    vW = ViewportWidth();
    if (d.length < 1) return;
    var dd = document.getElementById(d);
    AssignPosition(dd);
    dd.style.display = 'block';
    document.getElementById(d).innerHTML = '<img src="'+i+'" />';
}
function ReverseContentDisplay(d) {
    if (d.length < 1) return;
    var dd = document.getElementById(d);
    AssignPosition(dd);
    dd.style.display = (dd.style.display=='none')? 'block' : 'none';
}
function ViewportWidth() {
    if (self.innerWidth) return self.innerWidth;
    else if (document.documentElement && document.documentElement.clientWidth)
        return document.documentElement.clientWidth;
    else if (document.body) return document.body.clientWidth;
}