- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Angular.js 应用程序中使用 Packery & Draggabilly 创建类似仪表板的设置,用户可以在其中动态创建添加到 Packery 布局的窗口。我认为,我遇到的问题与将 Packery 和 Angular.js 正确地结合在一起有关。
总的来说,布局还可以:正确添加了 div,可以通过在 Canvas 上拖动来更改它们的顺序,也可以删除它们。问题在于,如果更改 div 顺序并将新的 div 添加到布局中,则 div 将重新定位到旧位置。例如:
Packery 指令:
win.controller('PackeryController', ['$scope', '$rootScope', '$timeout',
function($scope, $rootScope, $timeout) {
console.log("packery controller");
$scope.$onRootScope('packery.add', function(event, selection, type) {
$scope.add(selection, type);
});
$scope.windows = [];
$scope.windowRunningNumber = 0;
// remove from grid
$scope.remove = function(number, element) {
$scope.windows = _.reject($scope.windows, function(obj) {
return obj.number === number;
});
$scope.packery.remove(element[0]);
$scope.packery.layout();
};
// adds window to grid
$scope.add = function(selection, type) {
$scope.windows.push({
number: (++$scope.windowRunningNumber),
type: type,
variables: selection
});
};
}
]);
win.directive('packery', [
function() {
return {
restrict: 'C',
templateUrl: 'vis/windowing/packery.tpl.html',
replace: true,
controller: 'PackeryController',
scope: {},
link: function(scope, elm, attrs, controller) {
scope.packery = new Packery(elm[0], {
isResizeBound: true,
// see https://github.com/metafizzy/packery/issues/7
rowHeight: 410,
itemSelector: '.window',
gutter: '.gutter-sizer',
columnWidth: 500
});
}
};
}
]);
Packery Canvas 上单个 div/窗口的指令:
win.directive('window', ['$compile', '$injector',
function($compile, $injector) {
return {
scope: false,
require: '^packery',
restrict: 'C',
templateUrl: 'vis/windowing/window.tpl.html',
replace: true,
link: function($scope, ele, iAttrs, controller) {
$scope.element = ele;
var draggable = new Draggabilly($scope.element[0], {
handle: '.handle'
});
$scope.$parent.packery.bindDraggabillyEvents(draggable);
$scope.packery.reloadItems();
$scope.packery.layout();
// catch dragging operations
$scope.element.find('.handle').mousedown(function() {
$(window).mousemove(function() {
$scope.isDragging = true;
$(window).unbind("mousemove");
});
})
.mouseup(function() {
var wasDragging = $scope.isDragging;
$scope.isDragging = false;
$(window).unbind("mousemove");
if (!wasDragging) { //was clicking
return;
}
console.log("was dragging");
setTimeout(function() {
$scope.packery.reloadItems();
// $scope.packery.layout();
}, 900);
});
// catch window destroys
$scope.$on('$destroy', function() {
$scope.packery.reloadItems();
// $scope.packery.layout();
});
}
};
}
]);
我怀疑是
a) 我没有捕捉到所有必要的 DOM 操作(除了通过拖动添加、删除和更改顺序之外还有其他操作吗?)这会导致 Packery 实例不同步,或者
b) 这些 DOM 操作需要调用其他 Packery 方法。
有什么想法吗?我做错了什么?
最佳答案
在 Github 中的 Packery 开发人员的帮助下解决了这个问题.
参见 this Codepen要点。基本上你想避免 .reloadItems()
,并且不需要在拖动事件后进行布局(而且无论如何都可以更好地处理这些事件,请参阅 Draggabilly 文档中的 Events)。
关于javascript - 具有可拖动 div 的 Packery 布局不遵守项目顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161917/
我尝试将同位素与 packery 一起使用,但我不断收到以下错误“错误:无布局模式:packery” 代码如下: HTML: Javascript/Jquery: var $
我正在使用 Metafizzy 的 Packery 库创建一个布局,其中列出了帖子标题和缩略图。单击这些按钮后,我将隐藏初始内容,然后使用 ajax 加载帖子的其余部分以替换该初始内容。 我正在寻找有
我正在尝试在图像上传功能上结合 packery 和 dragabilly。我在同一个函数中初始化它们,但得到了 packery 没有初始化的错误。我尝试将我的代码分成两个函数,一个用于处理图像上传和拖
任何人都可以帮助我如何在拖动时保存包装元素的顺序。然后在保存的订单中重新订购包装元素。这是我之前使用的代码 $val){ ?> ">
我正在使用 Packery 一个 JavaScript 库和 jQuery 插件,由 David DeSandro 创建,可实现无缝且可拖动的布局。我用它来设置我的投资组合,但下面的代码不起作用。我想
我想使用这个插件:http://packery.metafizzy.co/ with layout mode: 一丝不苟如首页所述。我浏览了文档的每一页,但找不到如何将其设置为细致而不是默认的砖石布局
这是我的代码笔:http://codepen.io/helloworld/pen/JoKmQr 假设我从服务器获取了一组数据。数据有标题和订单号。 我有 5 个数组项,orderNumber 从 1
我正在尝试使用 packery 来对齐一些 div。一切正常,但我有一个烦人的空间,我不知道如何摆脱它。这个空间只出现在第二行,而且它们一直在继续。
我想强制网格元素始终位于最后一个位置,即使在移动元素之后也是如此。 我认为一个好的方法是 //get the total number of items var totalItems = $('.gr
我正在尝试使用 Packery 制作混合宽度/固定高度的布局。 虽然我可以让 Packery 工作,并且布置得很好——我需要知道布局完成后屏幕上显示的顺序(而不是 DOM 的顺序),以便我可以对某些
我正在使用 Packery 插件在我正在构建的网站上为我的图片库提供更有趣的布局。 我时不时地访问该页面,一些图像像这样相互重叠: 但是当我刷新页面时,它会正确显示: 我尝试在容器元素上指定高度但无济
我使用JQuery Packery效果很好。 我想到的问题是如何使项目容器在页面上居中? ... ... ... ... 我尝试过CSS: #container { marin:
我想删除 2 个元素,然后在单击按钮时将它们添加回使用 Packery 构建的网格。代码如下: $('.append-button').on( 'click', function() { // c
我似乎在使用将 packery 集成到 angular 中的目录时遇到了问题。当我加载到第一页时,它似乎工作得很好,但是当我离开页面并返回时,它看起来像是以一种奇怪的方式破坏包装,它正在工作,但一切似
当用户将鼠标悬停在包装网格中的网格项上时,我尝试在它们上模仿此动画(请注意,网格项包含背景图像): http://thefoxwp.com/portfolio-packery-4-columns/ 为
我找到了this question答案对我来说很完美。可以帮助我实现这个问题的答案吗?可以在 codepen 或其他地方使用 ng-repet 进行此更改吗?我不知道他说要实现是什么意思: 1)我必须
所以我有一个 Packery 网格,希望随机排列元素,以便它们至少可以完美地组织到容器的高度......如果宽度关闭,那很好。 看这样的布局:
我正在寻找 JavaScript Packery 成分。我想将当前的实现从 GridStack 切换到 Packery。现在阻止我的一件事是 Packery 中缺乏组件(面板)的动态调整大小效果。目前
在我的JQuery Packery app 我想将我的项目放在容器元素内。我使用以下结构: ... ... ... ... 我之前使用了 JQuery Isotope,我可以在其中
这是我 fiddle 中的 javascript 代码 http://jsfiddle.net/eadaradhiraj/v5d1qt7q/3/ // external js: packery.pkg
我是一名优秀的程序员,十分优秀!