分享

JS实现鼠标经过用户头像显示资料卡的效果,可点击

 人人驿站 2015-05-10
         基于项目的需要,需要制作出如下的一种页面效果:当用户鼠标经过好友列表中好友头像时,显示该好友的基本资料,其实也就是类似QQ客户端的那种功能。


       网上找了很多代码,基本都实现了鼠标悬浮之后弹出div,离开之后马上就消失了。还有些纯CSS的代码实现了这样的效果,但是对我没用,我需要的是JS的(因为我的数据还要通过Ajax取得),并且鼠标离开后不能马上隐藏,这个div上还有功能入口。这个页面效果折腾了我一天,由此可见我的JS和CSS技术有待提高...

       搜索了好久,终于发现了可行的2个思路如下,这2个方法有个例子,不是我写的,我也没用到,转过来分享一下。下载地址。我的方法参考了方法B的思路。

—————————————————————————————————————————————————————————————————————————————

方法A:
把浮动div和触发元素a放于同一个父级元素内,鼠标经过父级元素时触发显示。这样鼠标移动到div时仍然 处于该父级元素内,则div不会隐藏。


方法B:
鼠标经过a时弹出div,鼠标离开a时设置一个计时器用来关闭div,如果鼠标移动到div后则清除计时器。

—————————————————————————————————————————————————————————————————————————————


            我这个方法就是采用了上面方法B的思想,当用户离开触发事件的图像后,资料卡div要延时3秒才后关闭,用户拥有足够的时间进行相应的操作,当用户点击其他好友图像时,则会立刻调用hidden方法,将之前的打开正在计时的div关闭。


下面给出我的方法的JS代码:

[javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. //显示资料卡  
  2. var beforeId;   //定义全局变量  
  3. function showInfoCard(thisObj,id){  
  4.     this.hidden(beforeId);  //立刻隐藏前一个选中弹出来的div  
  5.     beforeId = id;  
  6. //  alert(id);  
  7. //  var d = $(thisObj);  
  8. //  var pos = d.offset();  
  9. //  var t = pos.top + d.height() - 5; // 弹出框的上边位置  
  10. //  var l = pos.left - d.width() - 600;  // 弹出框的左边位置  
  11. //  $("#"+id).css({ "top": t, "left": l }).show();  
  12. //    
  13.       
  14.     var objDiv = $("#"+id);  
  15.   
  16.     $(objDiv).css("display","block");  
  17.   
  18.     $(objDiv).css("left", event.clientX-280);   //弹出框的位置X值  
  19.       
  20.     $(objDiv).css("top", event.clientY-10);     //弹出框位置Y值  
  21. }  
  22. function hideInfoCard(id){  //隐藏div  
  23.     //延时3秒  
  24.     setTimeout('hidden('+id+')',3000);  
  25. }  
  26.   
  27. function hidden(id){  
  28.     $("#"+id).hide();  
  29. }  


下面是HTML中的隐藏的div代码片段:

  1. <div id="id" style="display:none; width:250px; height:150px; background-color:#D1EEEE;position:absolute;"></div>  


           在HTML中,需要调用showInfoCard和hideInfoCard方法,使用以下语句监听鼠标事件:

  1. onmouseover="showInfoCard(this,'${friend.friendId}')" onmouseout="hideInfoCard('${friend.friendId}')"  

       这些都是动态的代码片段,采用的时候需要引入jquery.js框架,当然也可以修改成纯JS的。上面的完成了,AJAX取得信息,然后利用JS在上面div中插入HTML代码即可完成显示,最后来张初步的效果图,挺丑的...


(原文地址:http://blog.csdn.net/zhshulin/article/details/36204089)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多