HMTL:
<body ng-app="app">
<div class="container" ng-controller="MainController as main">
<div class="column" ng-repeat="column in main.columns">
<div ng-repeat="image in column.images">
<img load src="{{image}}" alt="img" />
</div>
</div>
</div>
</body>
的Javascript:
angular
.module('app', [])
.controller('MainController', MainController)
.service('columnsService', columnsService)
.directive('load', loadDirective);
function MainController($scope, columnsService) {
var vm = this;
vm.columns = columnsService.columns;
columnsService.init([
'http://www.myschool21.narod.ru/mountain/images/fr_1041.jpg',
'http://wallpaperscraft.ru/image/92232/200x300.jpg?orig=3',
'http://cs10573.vk.me/g24449285/a_e2f12ad0.jpg',
'http://static2.gooddays.ru/photos/0002/6209/andorra_preview.jpg?1241084584',
'http://www.comunicom.ru/images/stories/PHOTO-2013/MINI/3.jpg'
]);
}
function columnsService() {
var service = {
images: [],
columnsCount: 3,
columns: [],
init: init,
initColumns: initColumns,
pushNextImage: pushNextImage,
getLowestColumn: getLowestColumn,
updateColumn: updateColumn
};
return service;
function init(images) {
service.images = images;
service.initColumns();
service.pushNextImage();
}
function initColumns() {
for (var i = 0; i < service.columnsCount; i++) {
service.columns[i] = {
height: 0,
images: []
};
}
}
function pushNextImage() {
var image = service.images.shift();
if (image) {
var column = service.getLowestColumn();
column.images.push(image);
}
}
function getLowestColumn() {
var minIndex = null;
var minHeight = null;
angular.forEach(service.columns, function(column, index) {
if (minIndex === null || column.height < minHeight) {
minIndex = index;
minHeight = column.height;
}
});
return service.columns[minIndex];
}
function updateColumn(index, height) {
service.columns[index].height += height;
}
}
function loadDirective(columnsService) {
var directive = {
restrict: 'A',
link: link
};
return directive;
function link($scope, element, attrs) {
element.on('load', function(event) {
$scope.$apply(function() {
columnsService.updateColumn($scope.$parent.$index, element[0].offsetHeight);
columnsService.pushNextImage();
});
});
}
}
直播:http://jsbin.com/qunih/1/edit
請張貼一些代碼,你有什麼試過? – 2014-09-26 09:50:11
我添加了一個鏈接到Punker,有一個完整的工作示例。如果你能幫助做更好的事情,我會非常感激。 – 2014-09-26 15:30:00