场景需求
需要把一个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)
};
- 元素点击绑定
PclickName="" //弹窗,cbTargetName="" // 点击的元素
commOpenHover(PclickName,cbTargetName)
总结
如果遇到overflow 和 absolute 一起用的话,absolute 不能移除请勿踩坑!!