鼠标悬停动态弹出浮动窗口显示图片

动态弹出浮动窗口显示图片的效果是这样子的:

 

不多说,直接上代码:

 

 

[html] view plain copy

  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>js弹出窗</title>  
  6.   
  7.     <style>  
  8.         a{  
  9.             float: left;  
  10.             margin-left:30px;  
  11.             margin-top: 50px;  
  12.         }  
  13.         img{  
  14.             width:400px;  
  15.             border:black 1px solid;  
  16.         }  
  17.         #image{  
  18.             position: absolute;  
  19.             display: none;  
  20.         }  
  21.     </style>  
  22.   
  23.     <script>  
  24.         //显示图片  
  25.         function displayImg() {  
  26.             var img = document.getElementById("image");  
  27.   
  28.             //var x = event.clientX + document.body.scrollLeft + 20;  
  29.             //var y = event.clientY + document.body.scrollTop - 5;   
  30.            var e = event || window.event;
               var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
               var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
               var x = e.pageX || e.clientX + scrollX;
               var y = e.pageY || e.clientY + scrollY;  
  31.             img.style.left = x + 180 + "px";  
  32.             img.style.top = y - 150 + "px";  
  33.             img.style.display = "block";  
  34.         }  
  35.    //图片消失
  36.     function vanishImg(imgId){ //theEvent用来传入事件,Firefox的方式
        if(typeof(HTMLElement)!="undefined"){    //给firefox定义contains()方法,ie下不起作用     
              HTMLElement.prototype.contains=function(obj){
                     while(obj!=null&&typeof(obj.tagName)!="undefind"){ //通过循环对比来判断是不是obj的父元素
                        if(obj==this) return true;
                        obj=obj.parentNode;
                      }
                      return false;
                  };
            }
             var theEvent = arguments.callee.caller.arguments[0] || window.event
             if (theEvent){
                  var browser=navigator.userAgent;   //取得浏览器属性
                  if (browser.indexOf("Firefox")>0){ //如果是Firefox
                   if (document.getElementById(imgId).contains(theEvent.relatedTarget)) { //如果是子元素
                      return;   //结束函式
                    }
                }
                  //if (browser.indexOf("MSIE")>0){ //如果是IE
                          //if (document.getElementById(imgId).contains(event.toElement)) { //如果是子元素
                                //return; //结束函式
                           //}
                // }
             }
            /*要执行的操作*/
             var img = document.getElementById(imgId);
             img.style.display = "none";
        }
  37.     </script>  
  38. </head>  
  39.   
  40. <body>  
  41.       
  42.     <a href="#" onmouseover="displayImg()" onmouseout="vanishImg()" onmousemove="displayImg()" >  
  43.         鼠标移至这里显示图片  
  44.     </a>  
  45.   
  46.     <a href="#" onmouseover="displayImg()" onmouseout="vanishImg()" onmousemove="displayImg()" >  
  47.         鼠标移至这里显示图片  
  48.     </a>  
  49.   
  50.     <a href="#" onmouseover="displayImg()" onmouseout="vanishImg()" onmousemove="displayImg()" >  
  51.         鼠标移至这里显示图片  
  52.     </a>  
  53.   
  54.     <a href="#" onmouseover="displayImg()" onmouseout="vanishImg()" onmousemove="displayImg()" >  
  55.         鼠标移至这里显示图片  
  56.     </a>  
  57.   
  58.   
  59.     <!--动态显示的图片-->  
  60.     <div id="image">  
  61.         <img src="XXXX.png" alt=""><!--如果加上AJAX就可以根据不同的超链接来显示不同的图片了-->  
  62.     </div>  
  63.   
  64. </body>  
  65. </html>  

 

 

 

 

这段代码很简单,基本谁都看得懂。不过其中有两个概念很容易被混淆,一个是 clientX 和 clientY,另一个是 scrollLeft 和 scrollTop。这两个属性经常使用,通过这两个属性,一个网页中的所有坐标尽在掌握之中。

 

(1)clientX 和 clientY 需配合 event 使用,用于触发鼠标事件时,获取鼠标在网页中的横和纵坐标。用W3C的解释是,clientX 事件属性返回当事件被触发时鼠标指针向对于浏览器页面(或客户区)的水平坐标;clientY 事件属性返回当事件被触发时鼠标指针向对于浏览器页面(或客户区)的垂直坐标。

 

(2)scrollLeft 和 scrollTop 常常配合 body 来使用,其中 scrollLeft是网页被卷去的左,scrollTop 是网页被卷去的高。问题来了,什么是“被卷去”?其可以理解为你看一个内容丰富的网页时,用鼠标往下滚轮滚动后,网页会有一部分被卷走了,然后出现往下新的部分。根据这一特性,通过 clientX + scrollLeft 就可以获取到当前鼠标基于整个网页的横坐标,通过 clientY + scrollTop 就可以获取到当前鼠标基于整个网页的纵坐标。

 

这段代码的核心是,设置要弹出的图片DIV为绝对定位,然后在js中动态修改样式中的 left 和 top 属性来控制DIV在网页中的显示位置。

 

 

entX与clientY是获取相对于当前屏幕的坐标,忽略了页面滚动因素,这在很多环境下很有用,但当我们需要考虑页面滚动,也就是相对于文档(body元素)的坐标时怎么办呢?只要加上滚动的位移就可以了。

在chrome可以通过document.body.scrollLeft,document.body.scrollTop计算出页面滚动位移,而在IE下可以通过document.documentElement.scrollLeft,document.documentElement.scrollTop

var e = event || window.event;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
var x = e.pageX || e.clientX + scrollX; var y = e.pageY || e.clientY + scrollY;  
最后建议:用onmouseenter和onmouseleave代替 onmouseover和onmouseout。

 

注:次博客转载一位大神而来,只是最近用到了这个功能,在他的基础上做了改进

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值