Infinite responsive, sortable, filterable and draggable layouts
Release PR with details: https://github.com/haltu/muuri/pull/487
Fixed a bug where layoutEnd
event was not emitted in some cases (e.g. when an item was being dragged while the layout happened). This bug was introduced in v0.9.0 when the layout system was fully refactored to accept async layout process too.
Fixes #406 , #402 , #403 and some layout issues where items would be overlapping.
The milestone: https://github.com/haltu/muuri/milestone/7
A huge step forward for Muuri. There are so many breaking changes that you really should consider this as a new major version (Muuri still needs to get to 1.0.0 version to start bumping the major versions).
In a quick summary:
Unfortunately, there are also some breaking changes ๐ข :
display
style is no longer set to block
by Muuri automatically when item is shown. This means that you can use whatever display style in your CSS for the item elements. When item is hidden its display
property is still set to none
by Muuri.layout.rounding
anymore (at least in most cases). This is why layout.rounding
is now by default disabled. The previous layout.rounding
rounded layout's width and height as well as all the item dimensions with Math.round()
. The new layout.rounding
only rounds item dimensions and does it with a bit more involved algorithm: Math.floor(Math.round(widthOrHeight * 1000) / 10) / 100
.layout.onResize
option's default value changed from 100
to 150
.dragStartPredicate.handle
removed and replaced with a new dragHandle
option, which works a bit differently (but in a good way). Previously there was no way to set the drag related event listeners to another element, even if you defined dragStartPredicate.handle
. However, with dragHandle
the drag related event listeners are now bound to the drag handle element so it gets much easier to to e.g . disable drag by hiding the handle via CSS.dragAxis
option default value changed from null
to "xy"
. This actually should not break anything, but more of a "heads up" thing.dragReleaseDuration
-> dragRelease.duration
.dragReleaseEasing
-> dragRelease.easing
.dragPlaceholder.easing
and dragPlaceholder.duration
removed. Placeholder now uses the layoutEasing
and layoutDuration
options' values always, which covers probably most of the use cases.grid.refreshItems()
and grid.refreshSortData()
now requires the first optional argument to be an array of Muuri.Item
instances.grid.remove()
, grid.show()
and grid.hide()
requires the first argument to be an array of Muuri.Item
instances.The milestone: https://github.com/haltu/muuri/milestone/2?closed=1
This version is a major refactoring as Hammer.js is fully deprecated and replaced with an internal drag system. The internal system was based heavily on Hammer.js API so it's not that far off functionality-wise and migration from previous version should be pretty easy.
This version also contains a few new features including drag placeholder and improved drag sort heuristics which make the drag sorting a much more nicer experience.
Additionally a lot of minor refactoring and performance/memory optimizations were carried out without any effects to the public API.
New features:
Breaking changes:
dragHammerSettings
-> dragCssProps
dragSortInterval
-> dragSortHeuristics.sortInterval
Fixes incorrect UMD pattern: https://github.com/haltu/muuri/issues/204#issuecomment-423668362
Fixes: