@egjs/flicking 4.14.2-beta.1 → 4.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declaration/Flicking.d.ts +6 -5
- package/dist/flicking.cjs.js +46 -22
- package/dist/flicking.cjs.js.map +1 -1
- package/dist/flicking.esm.js +46 -22
- package/dist/flicking.esm.js.map +1 -1
- package/dist/flicking.js +46 -22
- package/dist/flicking.js.map +1 -1
- package/dist/flicking.min.js +2 -2
- package/dist/flicking.min.js.map +1 -1
- package/dist/flicking.pkgd.js +46 -22
- package/dist/flicking.pkgd.js.map +1 -1
- package/dist/flicking.pkgd.min.js +2 -2
- package/dist/flicking.pkgd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/Flicking.ts +36 -16
- package/src/cfc/getRenderingPanels.ts +3 -4
- package/src/renderer/Renderer.ts +8 -5
- package/src/renderer/VanillaRenderer.ts +2 -2
package/package.json
CHANGED
package/src/Flicking.ts
CHANGED
|
@@ -119,7 +119,7 @@ export interface FlickingOptions {
|
|
|
119
119
|
threshold: number;
|
|
120
120
|
dragThreshold: number;
|
|
121
121
|
animationThreshold: number;
|
|
122
|
-
|
|
122
|
+
useCSSOrder: boolean;
|
|
123
123
|
interruptable: boolean;
|
|
124
124
|
bounce: number | string | [number | string, number | string];
|
|
125
125
|
iOSEdgeSwipeThreshold: number;
|
|
@@ -203,7 +203,7 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
203
203
|
private _threshold: FlickingOptions["threshold"];
|
|
204
204
|
private _dragThreshold: FlickingOptions["dragThreshold"];
|
|
205
205
|
private _animationThreshold: FlickingOptions["animationThreshold"];
|
|
206
|
-
private
|
|
206
|
+
private _useCSSOrder: FlickingOptions["useCSSOrder"];
|
|
207
207
|
|
|
208
208
|
private _interruptable: FlickingOptions["interruptable"];
|
|
209
209
|
private _bounce: FlickingOptions["bounce"];
|
|
@@ -230,6 +230,7 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
230
230
|
private _initialized: boolean;
|
|
231
231
|
private _plugins: Plugin[];
|
|
232
232
|
private _isResizing: boolean;
|
|
233
|
+
private _scheduleResize = false;
|
|
233
234
|
|
|
234
235
|
// Components
|
|
235
236
|
/**
|
|
@@ -719,17 +720,18 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
719
720
|
return this._animationThreshold;
|
|
720
721
|
}
|
|
721
722
|
/**
|
|
722
|
-
*
|
|
723
|
+
* Using `useCSSOrder` does not change the DOM order, but the `order` CSS property changes the order on the screen. (When `circular` is used, the DOM order changes depending on the position.)
|
|
723
724
|
* When using `iframe`, you can prevent reloading when the DOM order changes.
|
|
724
|
-
*
|
|
725
|
+
* In svelte, CSS order is always used.
|
|
726
|
+
* @ko `useCSSOrder`를 사용하면 DOM의 순서는 변경되지 않지만 `order` css가 설정되면서 화면상 순서가 바뀐다. (`circular`를 사용한 경우 위치에 따라 DOM의 순서가 변경된다.)
|
|
725
727
|
* `iframe`을 사용하는 경우 DOM의 순서가 변경되면서 reload가 되는 것을 막을 수 있다.
|
|
728
|
+
* svelte에서는 css order를 무조건 사용한다.
|
|
726
729
|
* @type {boolean}
|
|
727
|
-
* @requires `circular`
|
|
728
730
|
* @default false
|
|
729
|
-
* @see {@link https://naver.github.io/egjs-flicking/Options#
|
|
731
|
+
* @see {@link https://naver.github.io/egjs-flicking/Options#useCSSOrder useCSSOrder ( Options )}
|
|
730
732
|
*/
|
|
731
|
-
public get
|
|
732
|
-
return this.
|
|
733
|
+
public get useCSSOrder() {
|
|
734
|
+
return this._useCSSOrder;
|
|
733
735
|
}
|
|
734
736
|
|
|
735
737
|
/**
|
|
@@ -1148,8 +1150,8 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
1148
1150
|
public set animationThreshold(val: FlickingOptions["animationThreshold"]) {
|
|
1149
1151
|
this._animationThreshold = val;
|
|
1150
1152
|
}
|
|
1151
|
-
public set
|
|
1152
|
-
this.
|
|
1153
|
+
public set useCSSOrder(val: FlickingOptions["useCSSOrder"]) {
|
|
1154
|
+
this._useCSSOrder = val;
|
|
1153
1155
|
}
|
|
1154
1156
|
|
|
1155
1157
|
public set interruptable(val: FlickingOptions["interruptable"]) {
|
|
@@ -1327,7 +1329,7 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
1327
1329
|
renderExternal = null,
|
|
1328
1330
|
optimizeSizeUpdate = false,
|
|
1329
1331
|
animationThreshold = 0.5,
|
|
1330
|
-
|
|
1332
|
+
useCSSOrder = false,
|
|
1331
1333
|
}: Partial<FlickingOptions> = {}) {
|
|
1332
1334
|
super();
|
|
1333
1335
|
|
|
@@ -1377,7 +1379,7 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
1377
1379
|
this._renderExternal = renderExternal;
|
|
1378
1380
|
this._optimizeSizeUpdate = optimizeSizeUpdate;
|
|
1379
1381
|
this._animationThreshold = animationThreshold;
|
|
1380
|
-
this.
|
|
1382
|
+
this._useCSSOrder = useCSSOrder;
|
|
1381
1383
|
|
|
1382
1384
|
// Create core components
|
|
1383
1385
|
this._viewport = new Viewport(this, getElement(root));
|
|
@@ -1461,7 +1463,9 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
1461
1463
|
|
|
1462
1464
|
this._plugins.forEach((plugin) => plugin.destroy());
|
|
1463
1465
|
|
|
1466
|
+
this._scheduleResize = false;
|
|
1464
1467
|
this._initialized = false;
|
|
1468
|
+
this._isResizing = false;
|
|
1465
1469
|
}
|
|
1466
1470
|
|
|
1467
1471
|
/**
|
|
@@ -1859,11 +1863,20 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
1859
1863
|
* @method
|
|
1860
1864
|
* @fires Flicking#beforeResize
|
|
1861
1865
|
* @fires Flicking#afterResize
|
|
1862
|
-
* @return {
|
|
1866
|
+
* @return {boolean}
|
|
1863
1867
|
*/
|
|
1864
1868
|
public async resize(): Promise<void> {
|
|
1865
|
-
if (this.
|
|
1869
|
+
if (!this._initialized) {
|
|
1870
|
+
return;
|
|
1871
|
+
}
|
|
1872
|
+
if (this._isResizing) {
|
|
1873
|
+
// resize를 연속으로 발생하면 무시하기에 마지막 viewport를 사이즈를 알 수 없음.
|
|
1874
|
+
// resize를 1번 더 실행할 수 잇는 스케줄링 등록
|
|
1875
|
+
this._scheduleResize = true;
|
|
1876
|
+
return;
|
|
1877
|
+
}
|
|
1866
1878
|
|
|
1879
|
+
this._scheduleResize = false;
|
|
1867
1880
|
this._isResizing = true;
|
|
1868
1881
|
|
|
1869
1882
|
const viewport = this._viewport;
|
|
@@ -1910,6 +1923,7 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
1910
1923
|
camera.updatePanelOrder();
|
|
1911
1924
|
camera.updateOffset();
|
|
1912
1925
|
await renderer.render();
|
|
1926
|
+
|
|
1913
1927
|
if (!this._initialized) {
|
|
1914
1928
|
return;
|
|
1915
1929
|
}
|
|
@@ -1939,6 +1953,12 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
1939
1953
|
);
|
|
1940
1954
|
|
|
1941
1955
|
this._isResizing = false;
|
|
1956
|
+
|
|
1957
|
+
// 연속으로 resize를 호출하는 경우를 대비하기 위해서 스케줄링 반영
|
|
1958
|
+
if (this._scheduleResize) {
|
|
1959
|
+
this.resize();
|
|
1960
|
+
}
|
|
1961
|
+
return;
|
|
1942
1962
|
}
|
|
1943
1963
|
|
|
1944
1964
|
/**
|
|
@@ -2136,8 +2156,8 @@ class Flicking extends Component<FlickingEvents> {
|
|
|
2136
2156
|
const nearestAnchor = camera.findNearestAnchor(defaultPanel.position);
|
|
2137
2157
|
const initialPanel =
|
|
2138
2158
|
nearestAnchor &&
|
|
2139
|
-
|
|
2140
|
-
|
|
2159
|
+
defaultPanel.position !== nearestAnchor.panel.position &&
|
|
2160
|
+
defaultPanel.index !== nearestAnchor.panel.index
|
|
2141
2161
|
? nearestAnchor.panel
|
|
2142
2162
|
: defaultPanel;
|
|
2143
2163
|
control.setActive(initialPanel, null, false);
|
|
@@ -13,11 +13,11 @@ export default <T>(flicking: Flicking, diffResult: DiffResult<T>) => {
|
|
|
13
13
|
return map;
|
|
14
14
|
}, {});
|
|
15
15
|
const renderingPanels = flicking.panels
|
|
16
|
-
|
|
16
|
+
.filter(panel => !removedPanels[panel.index]);
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
if (!flicking.
|
|
20
|
-
//
|
|
19
|
+
if (!flicking.useCSSOrder) {
|
|
20
|
+
// useCSSOrder를 사용하게 되는 경우 sort를 하지 않는다.
|
|
21
21
|
renderingPanels.sort((panel1, panel2) => (panel1.position + panel1.offset) - (panel2.position + panel2.offset));
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -26,4 +26,3 @@ export default <T>(flicking: Flicking, diffResult: DiffResult<T>) => {
|
|
|
26
26
|
...diffResult.added.map(idx => diffResult.list[idx])
|
|
27
27
|
];
|
|
28
28
|
};
|
|
29
|
-
|
package/src/renderer/Renderer.ts
CHANGED
|
@@ -521,7 +521,7 @@ abstract class Renderer {
|
|
|
521
521
|
const firstPanelSizeObj = {
|
|
522
522
|
size: panelSize,
|
|
523
523
|
margin: referencePanel.margin,
|
|
524
|
-
...(!flicking.horizontal && { height: referencePanel.height})
|
|
524
|
+
...(!flicking.horizontal && { height: referencePanel.height })
|
|
525
525
|
};
|
|
526
526
|
|
|
527
527
|
if (!flicking.noPanelStyleOverride) {
|
|
@@ -566,12 +566,15 @@ abstract class Renderer {
|
|
|
566
566
|
|
|
567
567
|
flicking.camera.applyTransform();
|
|
568
568
|
|
|
569
|
-
if (flicking.
|
|
570
|
-
//
|
|
571
|
-
const
|
|
569
|
+
if (flicking.useCSSOrder) {
|
|
570
|
+
// `useCSSOrder`를 사용하는 경우 DOM은 변화가 없지만 대신 css `order`값을 주입
|
|
571
|
+
const renderedPanels = flicking.renderer.panels.filter(panel => panel.rendered);
|
|
572
572
|
|
|
573
573
|
this._strategy.getRenderingIndexesByOrder(flicking).forEach((domIndex, index) => {
|
|
574
|
-
|
|
574
|
+
if (renderedPanels[domIndex].element) {
|
|
575
|
+
// 방어 코드 추가
|
|
576
|
+
renderedPanels[domIndex].element.style.order = `${index}`;
|
|
577
|
+
}
|
|
575
578
|
});
|
|
576
579
|
}
|
|
577
580
|
}
|
|
@@ -43,8 +43,8 @@ class VanillaRenderer extends Renderer {
|
|
|
43
43
|
|
|
44
44
|
let reversedElements: HTMLElement[] = [];
|
|
45
45
|
|
|
46
|
-
if (flicking.
|
|
47
|
-
//
|
|
46
|
+
if (flicking.useCSSOrder) {
|
|
47
|
+
// useCSSOrder를 사용하는 경우 DOM은 변화가 없지만 대신 css `order`값을 주입
|
|
48
48
|
reversedElements = this.getRenderedPanels().map(panel => panel.element).reverse();
|
|
49
49
|
} else {
|
|
50
50
|
reversedElements = this._strategy
|