Js-Html 前端系列--点击非Div区域隐藏Div

时间:2023-03-08 21:10:35
Js-Html 前端系列--点击非Div区域隐藏Div

最近做项目要用到三字码下拉,调用一个插件,但是滚动条不能点击。
后来看另一个插件后突发奇想,在点击其他区域的时候隐藏这个Div就可以了。

背景:输入文字,弹出下拉Div,点击或者拉动Div滚动条选择,但是要点击滚动条的时候会隐藏掉,也就是点击不了滚动条。

思路:写一个Document级别的事件,监听MouseDown事件,判断点击区域进行判断是否要隐藏这个下拉Div。

JS版实现:

 
$(document).bind('mousedown',function(event){
            var $target = $(event.target);
            if((!($target.parents().andSelf().is('#' + suggestContainerId)))&& !$target.is('#' + target) ){
                if($('#' + target).is(":focus")||$('#' + suggestContainerId).is(":focus")){
                    $('#' + suggestContainerId).hide();
                    $('#' + target).val("");
                }else{
                    $('#' + suggestContainerId).hide();
                }
           }
 });


AngularJs版本实现:
define(['angular'], function(){
    var commonDirectives = angular.module("commonDirectives", []);
    commonDirectives.directive("zoneClick", function(){
        return {
            restrict: "AE",
                scope:{
                      skey:"=",//控制显示隐藏的Key
                      sid:"@"//手动传入一个ID
                 },
        link: function(scope, element, attrs){
                scope.$watch('', function (o, n) {
                    $(element[0]).attr("id",scope.sid);
                      $(document).bind('mousedown', function (event) {
                          var $target = $(event.target);
                          if (!($target.parents().andSelf().is("#"+scope.sid))) {
                              scope.$apply(function(){
                                  return scope.skey = false;
                                })
                          }else{
                              scope.$apply(function(){
                                  return scope.skey = true;
                                })
                          }
                      });
                  });
        }
          }
    })
})

注:('#' + suggestContainerId)和 ('#' + target)是当前场景下的ID;

var target=target = (event.target); 这一步是得到当前的目标点击对象。




注:(’#’ + suggestContainerId)和 (’#’ + target)是当前场景下的ID;
var target=(event.target); 这一步是得到当前的目标点击对象。