鼠标移到链接,显示一个信息层,鼠标移出链接进入信息层消失!

场景是鼠标移动到用户名字,会显示该用户的个人信息的层,在这个层上可以对用户进行关注。

现在碰到问题是从用户名字移开,进入个人信息层的时候,信息会消失。因为我写了一个移除代码。我感觉我写错了,但是我又不知道怎么写。

        $(document).on("mouseover mouseout", "a[name='user']", function (event) {
            if (event.type == "mouseover") {

             //todo ajax获取用户信息

              result = $.ajax({
                    type: "post",
                    data: {op: "getUserContent", id: uid},
                    url: "../lib/ajax_model.php",
                    async: false
                });
                var data = result.responseText;
              
         //todo ....
         //todo 构建popover_box,用定位显示在当前的链接附近
                $(this).append($iDiv);

            }
            else if (event.type == "mouseout") {
             $(this).find('.popover_box').remove();
         //popover_box是构建的层,移除链接后,直接移掉该层
             }
          

        })

后续问题补充:


补充动态生成的popover_box显示层是这样的

<a name="user" data-uid="10003" >张三
<div class="popover_member">
<div class="member_face">xxx</div>
<div class="member_name">xxxx</div>
</div>
</a>

现在是实际是:
然后从popover_member移入到子元素如member_face,出现了层关闭的问题,加了setTimeout(),能解决问题。

从张三移出后,移到popover_member ,使用了setTimeout();没有作用。按输出的html结构来看 popover_member的层应该<a name="user">的子元素吧??

补充新:
鼠标移到头像或者名字,会显示这个层,但是鼠标移入到红色区域,这个用户信息层会消失,但是这个层和红色之间的这块白色区域鼠标是不会消失的,这块区域我是对popover_member用了padding


图片描述

问题补充新


        $(document).on("mouseover mouseout", "a[name='user']", function (event) {


            var remove_popoverbox_fun = function () {
                $('.popover_box').remove();

            
            };

            if (event.type == "mouseover") {
              
                if ($(this).find('.popover_box').html() == undefined) {
                    xy = $(this).offset();

                  
                    var top = xy.top + 15;
                    var left = xy.left + 20;
                    var width = 300;
                    var height = 130;


                    uid = $(this).data("id");
                  
                  /*
                    htmlobj = $.ajax({
                        type: "post",
                        data: {op: "getUserContent", id: uid},
                        url: "../lib/ajax_data.php",
                        async: false
                    });
                    var data = htmlobj.responseText;
                   

                    var obj = eval("(" + data + ")");//转换后的JSON对象
                    */


                    $(this).css("poisitin", "relative");
                    var $iDiv = $("<div class=\"popover_box\"><div  class=\"popover_member\"><div class=\"popover_member_face\"><img src=\"xxx\"/></div><div class=\"popover_member_name\">李强</div>" +
                     "<div class=\"popover_member_company\">公司名称</div></div><div class=\"popover_member_stat\">文章1 话题2 </div></div>");
                    var $iDiv = $(obj.content);
                    $iDiv.css("top", top + "px");
                    $iDiv.css("left", left + "px");
                    $(this).append($iDiv);

                    $(".popover_box").on("mouseenter",function(){
                        clearTimeout(remove_popoverbox_Timer);
                      


                    });
                    $(".popover_box").on("mouseleave",function(){
                            remove_popoverbox_fun();
                    });
                    
                }


            }
            else if (event.type == "mouseout") {
                alert("leave");
                clearTimeout(remove_popoverbox_Timer);
                remove_popoverbox_Timer=setTimeout(function(){
                    remove_popoverbox_fun();
                },100);
                
            }


        })
阅读 4.2k
1 个回答

1)不监听对a[name=user]链接的mouseout事件,而是监听 $('.popover_box')元素的mouseout事件,适合
.popover_box元素显示在链接上方
2)还是监听a[name=user]链接的mouseout事件,但是设置一个延迟操作,同时监听.popover_box元素的mouseover事件,适合元素和链接有段距离,需要鼠标移动的情况。代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="script/jquery-2.1.3.min.js"></script>
    <script>

        $(function(){
            var remove_popoverbox_Timer;
            $(document).on("mouseover mouseout", "a[name='user']", function (event) {
                var remove_popoverbox_fun=function(){
                    $('.popover_member_outer').remove();
                    //popover_box是构建的层,移除链接后,直接移掉该层
                };
                if (event.type == "mouseover") {

                    //todo ajax获取用户信息
                    var data = '' +
                            '<div class="popover_member_outer" style="padding:10px;border:1px solid red;width: 150px;height:150px;">'+
                            '   <div class="popover_member" style="padding:10px;border:1px solid red;width: 100px;height:100px;">'+
                            '       <div class="member_face">xxx</div>'+
                            '       <div class="member_name">xxxx</div>'+
                            '   </div>'+
                            '</div>';

                    var $iDiv=$(data);
                    //todo ....
                    //todo 构建popover_box,用定位显示在当前的链接附近
                    //$(this).append($iDiv);
                    var offsetPosition=$(this).offset();
                    $('body').append($iDiv);
                    $iDiv.css({
                        position:'absolute',
                        left:offsetPosition.left+30+'px',
                        top:offsetPosition.top+'px'
                    });
                    $('.popover_member_outer').on("mouseenter",function(){
                        clearTimeout(remove_popoverbox_Timer);
                    });
                    $('.popover_member_outer').on("mouseleave",function(){
                        remove_popoverbox_fun();
                    });
                }
                else if (event.type == "mouseout") {
                    clearTimeout(remove_popoverbox_Timer);
                    remove_popoverbox_Timer=setTimeout(function(){
                        remove_popoverbox_fun();
                    },100);
                }


            })
        });

    </script>
</head>
<body>

<a name="user" data-uid="10003"  >张三</a>

</body>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题