【自定义下拉展开弹窗(仿select)】点击展开,下拉展示框

场景需求

在这里插入图片描述

需要把一个hover的div改成点击事件

直接上代码,三步走

1.封装hover的div目标元素事件

var PclickName="" //弹窗,cbTargetName="" // 点击的元素
  function commOpenHover(dom,target){
            PclickName=dom;cbTargetName=target;
            if(!isClickPop){
                return;
            }
            //避免两个下拉同时出现
            if($(".hoverPop:visible").length==1&&!$(dom).is(':visible')){
                //关闭别人的弹窗
                    $(".hoverPop").slideUp(200);

                }
                //处理自己弹窗
               if( $(dom).is(':visible')){
                    $(dom).slideUp(200);
                }else{
                    $(dom).slideDown(200);
                }
        }
  //全局监听事件
        var timerClick= null,isClickPop= true;
         
        window.onclick = function(event) {
            if( !isClickPop){
                return;
            }
           if(timerClick){
               clearTimeout(timerClick)
           }
            timerClick=  setTimeout(function(){
             if($(PclickName).is(':visible')&&!matchesComm(event.target,cbTargetName)){
                        $(PclickName).hide();

                    }
               },200)
        };
        function matchesComm(target,doms){
            var res = false;
            if($(doms).length>0){
                for(var i=0;i<$(doms).length;i++){
                    $(doms)[i].contains(target);
                    if($(doms)[i].contains(target)){
                        res = true;
                    }
                }
                return res;
            }
        }

兼容ie用contains,不考虑ie的话用matches

  window.onclick = function(event) {
            if( !isClickPop){
                return;
            }
           if(timerClick){
               clearTimeout(timerClick)
           }
            timerClick=  setTimeout(function(){
            if($(PclickName).is(":visible")&&&& (!event.target.matches(cbTargetName)){
			    $(PclickName).hide();
		}
               },200)
        };
  1. 元素点击绑定

在这里插入图片描述

 PclickName="" //弹窗,cbTargetName="" // 点击的元素
 commOpenHover(PclickName,cbTargetName)

总结

如果遇到overflow 和 absolute 一起用的话,absolute 不能移除请勿踩坑!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的小编

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值