html - 除了angularjs中的几个链接外,如何在其外部单击时隐藏div

标签 html css angularjs

我有几个来自循环的链接,一旦我点击这些链接,每次都会显示一个 div。但是这里我需要在我点击链接以外的任何地方后隐藏 div。这是下面的代码。当我点击'click-1',div会显示,当我再次点击'click-2'时,其他div会显示..等等 https://plnkr.co/edit/jv7uKHlryMnkJgK9wVM6?p=preview

HTML

<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
    <script src="script.js"></script>
  </head>

  <body>
   <div class="maindiv" ng-app="myApp" ng-controller="myCtrl">
  <ul>
    <li ng-repeat="x in data" >
       <div ng-click="setActiveItem(x)" class="id">Click-{{x.id}}</div>
       &nbsp;&nbsp;&nbsp;ssssssssssss
       <div class="arrow_box name" ng-show="activeItem==x">
       <h3>{{x.name}}</h3>
       <p>Hello world</p>
       <h3>{{x.name}}</h3>
       <p>Hello world</p>
       <h3>{{x.name}}</h3>
       <p>Hello world</p>
       </div>
    </li>
  </ul>  
</div>
  </body>

</html>

脚本.JS

var data = [{"name":"name1","title":"title1","id":"1"},{"name":"name2","title":"title2","id":"2"},{"name":"name3","title":"title3","id":"3"}];
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {

  $scope.data = data;

  $scope.setActiveItem = function(item){
     $scope.activeItem = item;
  }

  // show first on page load
  // $scope.activeItem = data[0];

});// Code goes here

样式.CSS

ul li{
list-style-type:none;
cursor:pointer;
}
ul{
margin:0;
}
.maindiv{
position:relative;
}
.name{
position: absolute;
    left: 97px;
    background: #fff;
    border: 1px solid;
    width: 61px;
    height: 202px;
    overflow: auto;
    width: 24%;
}
.arrow_box {
    position: absolute;
    background: #ffffff;
    border: 1px solid #ccc;
}
.arrow_box:after, .arrow_box:before {
    right: 100%;
    top: 50%;
    border: solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
}

.arrow_box:after {
    border-color: rgba(0, 0, 0, 0);
    border-right-color: #000000;
    border-width: 5px;
    margin-top: -5px;
}
.arrow_box:before {
    border-color: rgba(0, 0, 0, 0);
    border-right-color: #000000;
    border-width: 8px;
    margin-top: -8px;
}
.id,name{
float:left;
}

最佳答案

如果我没理解错的话,您可以尝试在打开“arrow_box”时显示一个叠加层,它会捕获点击事件以隐藏它并关闭“arrow_box”。

我已经更新了你的插件:https://plnkr.co/edit/CHk6atcGYLykpeXN7Z1g?p=preview

关键元素是那些:

叠加层:

<div class="overlay" ng-show="activeItem!=null" ng-click="setActiveItem(null)"></div>

对应的css:

.overlay{
  position:absolute;
  left:0;
  top:0;
  bottom:0;
  right:0;
  background:rgba(0,0,0,.5);
  z-index:1;
}

修改后的arrow_box css:

.arrow_box {
    position: absolute;
    background: #ffffff;
    border: 1px solid #ccc;
    z-index:10;                <------ the modification
}

请注意,您的 ng-appng-controller 也移动了。

希望对你有帮助

关于html - 除了angularjs中的几个链接外,如何在其外部单击时隐藏div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55598297/

相关文章:

html - CSS flex 盒 : Center container with left-justified elements

javascript - 如何在使用 ASP.NET MVC 核心制作的应用程序的一两个页面中使用 Angular 4 作为迷你水疗中心?

javascript - firebase.database 不是函数

javascript - AngularJS错误: Provider must return value from $get factory method

Javascript(叠加菜单)关闭过渡

CSS 列表样式 - 即使使用适当的列表样式类型也不会显示标记元素符号

html - 如何将图像放入div容器?

javascript - 如何在 Angular4 中检测父 div 上的焦点而不是子 div 上的焦点

html - 左右浮动两个元素并垂直居中 UL?

jquery - Bootstrap 3 选项卡 CSS 自定义