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

发布于 2024-11-15 19:04:37 字数 2462 浏览 0 评论 0原文

我有一个 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 加载请求放入时就会失败。如何解决这个问题?

谢谢。

I have got a javascript code that will make a floating image appear next to the mouse pointer (and through the use of php it shows the image that the mosue is hovering over, but full size because the image on the page itself is sized down a bit). But whilst it is OK if the image is on the left of the page, there is a problem if the image is on the right hand side.

The code:

<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>

Here is a standard image that will trigger the floating content:

<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--

.... On its own this is fine and it works. as you can float the mouse over the next thumbnail image and the floating image changes accordingly whilst keeping aspect ratio. BUT if the thumbnail image is on the right hand side, the floating image is off the right hand edge of the screen and cannot be seen: is there any way of placing a 'block' within the JS code so that if the thumbnail image is close to the edge of the content (screen edge or edge of the containing DV layer) than it shows the image on the left hand side of the mouse pointer instead?

Next question: this code works fine if I open the page on its own - BUT my website design will be calling the page to open inside a DIV layer by means of AJAX. This breaks the code and it doesn't work then. This has happened with other scripts I have written: works fine by itself, but put in through an AJAX load request and it fails. How can this be solved?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橘香 2024-11-22 19:04:38

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

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;
}

I've modified your script so that the image will switch to the left when the mouse is too far to the right:

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文