我有 100 个宽度为 100px 的 div s,可以放入 250px 宽度的父级。无论高度如何,我都需要将 div s 以行显示,如图所示。我试过用 css 解决这个问题,遗憾的是我理解了现实。

html - 带有 angularjs 的网格/平铺 View-LMLPHP

有没有我可以使用的 angularjs 插件

我听说过 jquery masonry ,有没有更好的选择?

当@Divyanshu Maithani 要求解决我当前的问题时,
请参阅下面的 plunker 链接,其中我试图用 angular-masonry 解决我的问题

html - 带有 angularjs 的网格/平铺 View-LMLPHP

<div masonry>
    <div ng-repeat="item in items" class="masonry-brick item">
      {{item.name}}
      <button class="toggle-button" ng-click="item.show=!item.show">show</button>
      <div ng-if="item.show" class="hidden-box">
        This is a hidden box for {{$index+1}}th item.
      </div>
    </div>
  </div>

Plunker DEMO

而且我也在寻找其他选项,因为我不想用像 angular-masonry 这样的 jquery 插件结束我的问题。任何帮助将不胜感激。谢谢

最佳答案

AngularJS Masonry 。您可以在主页上看到演示。使用 masonry-brick 类很简单:

<div masonry>
    <div class="masonry-brick" ng-repeat="brick in bricks">
        <img ng-src="{{ brick.src }}" alt="A masonry brick">
    </div>
</div>

更新

为了让您的 masonry-brick 不相互重叠,您需要 reload masonry 每当您 showhide 一个内部 div 。我在 function 上添加了一个 ng-click ,它也会 broadcast 一个 masonry.reload 事件来重新加载相同的事件。

检查 this 工作代码。

JS
$scope.showItem = function(index) {
    $scope.items[index].show = !($scope.items[index].show);
    $scope.$broadcast('masonry.reload');
}

HTML
<div masonry>
    <div ng-repeat="item in items" class="masonry-brick item">
      {{item.name}}
      <button class="toggle-button" ng-click="showItem($index)">show</button>
      <button class="toggle-button" ng-click="remove($index)">X</button>
      <div ng-if="item.show" class="hidden-box">
        This is a hidden box for {{$index+1}}th item.
      </div>
    </div>
</div>

编辑

由于 masonry 会立即重新加载而 masonry 过渡的动画需要时间,因此似乎存在问题。我在 this plunk 中添加了一些过渡持续时间和 $timeout

关于html - 带有 angularjs 的网格/平铺 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40419213/

10-13 00:42