efront 3.14.3 → 3.15.1
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/coms/basic/Array2.js +9 -0
- package/coms/basic/Speed.js +120 -0
- package/coms/basic/assert.js +11 -2
- package/coms/basic/matrix.js +283 -0
- package/coms/basic/parseYML.js +5 -3
- package/coms/compile/common.js +6 -2
- package/coms/compile/washcode.js +1 -1
- package/coms/zimoli/color.js +2 -1
- package/coms/zimoli/data.js +3 -1
- package/coms/zimoli/drag.js +1 -0
- package/coms/zimoli/extendTouchEvent.js +1 -1
- package/coms/zimoli/inertia.js +1 -70
- package/coms/zimoli/lattice.js +1 -0
- package/coms/zimoli/list.js +39 -29
- package/coms/zimoli/matrix_test.js +10 -0
- package/coms/zimoli/menu.less +3 -1
- package/coms/zimoli/menuList.js +5 -3
- package/coms/zimoli/moveupon.js +1 -0
- package/coms/zimoli/on.js +40 -6
- package/coms/zimoli/oncemount.js +7 -0
- package/coms/zimoli/onmounted.js +0 -1
- package/coms/zimoli/picture_.js +67 -71
- package/coms/zimoli/render.js +2 -0
- package/coms/zimoli/slider.js +4 -2
- package/coms/zimoli/speed.js +10 -14
- package/coms/zimoli/speed_test.js +34 -0
- package/coms/zimoli/tree.less +0 -2
- package/coms/zimoli/vbox.js +32 -74
- package/coms/zimoli/vscroll.js +3 -2
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/zimoli/matrix.js +0 -146
package/coms/zimoli/list.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// 中文编码 utf8
|
|
2
|
-
function ylist(container, generator, $Y
|
|
2
|
+
function ylist(container, generator, $Y) {
|
|
3
3
|
const cache_height = 2000;
|
|
4
4
|
var restHeight = cache_height;
|
|
5
5
|
var list = container || div();
|
|
@@ -54,7 +54,7 @@ function ylist(container, generator, $Y, group) {
|
|
|
54
54
|
scrollTop += deltaY;
|
|
55
55
|
for (var cx = 0, dx = children.length; cx < dx; cx++) {
|
|
56
56
|
var child = children[cx];
|
|
57
|
-
if (isFinite(child.index) && child.offsetTop + child.offsetHeight
|
|
57
|
+
if (isFinite(child.index) && child.offsetTop + child.offsetHeight > scrollTop) {
|
|
58
58
|
return child;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -174,7 +174,7 @@ function ylist(container, generator, $Y, group) {
|
|
|
174
174
|
}
|
|
175
175
|
var indexed_item = getIndexedElement(index) || bottom_item;
|
|
176
176
|
if (indexed_item) {
|
|
177
|
-
list.scrollTop = -getFirstElement().offsetTop + indexed_item.offsetTop + indexed_item.offsetHeight * ratio;
|
|
177
|
+
list.scrollTop = -getFirstElement(1).offsetTop + indexed_item.offsetTop + indexed_item.offsetHeight * ratio;
|
|
178
178
|
}
|
|
179
179
|
};
|
|
180
180
|
var runbuild = lazy(function () {
|
|
@@ -229,7 +229,7 @@ function ylist(container, generator, $Y, group) {
|
|
|
229
229
|
var cache_height = list.offsetHeight;
|
|
230
230
|
|
|
231
231
|
var childrenMap = getChildrenMap();
|
|
232
|
-
var last_element = getLastElement();
|
|
232
|
+
var last_element = getLastElement(1);
|
|
233
233
|
if (!last_element || !last_element.offsetHeight) return;
|
|
234
234
|
let { scrollTop } = list;
|
|
235
235
|
scrollTop += deltaY;
|
|
@@ -264,7 +264,14 @@ function ylist(container, generator, $Y, group) {
|
|
|
264
264
|
}
|
|
265
265
|
}
|
|
266
266
|
if (collection.length) {
|
|
267
|
-
var
|
|
267
|
+
var item = collection[collection.length - 1];
|
|
268
|
+
var { paddingCount = 0, paddingMax } = list;
|
|
269
|
+
if (item) item = item.nextSibling;
|
|
270
|
+
if (!paddingMax) while (item && item.index % list.group) {
|
|
271
|
+
item = collection.pop();
|
|
272
|
+
}
|
|
273
|
+
var item = collection[collection.length - 1];
|
|
274
|
+
if (item) scrollTop -= item.offsetTop + getOffsetHeight(item) - collection[0].offsetTop;
|
|
268
275
|
if (paddingCount > 0 && paddingMax > 0 && paddingCount < paddingMax) {
|
|
269
276
|
let item = collection[collection.length - 1];
|
|
270
277
|
while (paddingCount > 0) {
|
|
@@ -274,13 +281,6 @@ function ylist(container, generator, $Y, group) {
|
|
|
274
281
|
item = item.nextSibling;
|
|
275
282
|
}
|
|
276
283
|
}
|
|
277
|
-
var item = collection[collection.length - 1];
|
|
278
|
-
if (item) item = item.nextSibling;
|
|
279
|
-
while (item && item.index % group) {
|
|
280
|
-
item = collection.pop();
|
|
281
|
-
}
|
|
282
|
-
var item = collection[collection.length - 1];
|
|
283
|
-
if (item) scrollTop -= item.offsetTop + getOffsetHeight(item) - collection[0].offsetTop;
|
|
284
284
|
remove(collection);
|
|
285
285
|
}
|
|
286
286
|
//滚动到相应的位置
|
|
@@ -302,7 +302,7 @@ function ylist(container, generator, $Y, group) {
|
|
|
302
302
|
if (!(paddingCount > 0 && paddingMax > 0 && paddingCount < paddingMax) || !(scrollTop < targetHeight)) {
|
|
303
303
|
paddingCount = 0;
|
|
304
304
|
}
|
|
305
|
-
while (scrollTop < targetHeight || paddingCount > 0 || offset % group) {
|
|
305
|
+
while (scrollTop < targetHeight || paddingCount > 0 || offset % list.group) {
|
|
306
306
|
offset--;
|
|
307
307
|
if (!(scrollTop < targetHeight)) {
|
|
308
308
|
paddingCount--;
|
|
@@ -352,36 +352,45 @@ function ylist(container, generator, $Y, group) {
|
|
|
352
352
|
}
|
|
353
353
|
};
|
|
354
354
|
|
|
355
|
-
list.stopY = function () {
|
|
355
|
+
list.stopY = function (count, spd) {
|
|
356
356
|
var firstElement = getFirstVisibleElement();
|
|
357
|
-
|
|
358
|
-
|
|
357
|
+
var lastElement = getLastVisibleElement();
|
|
358
|
+
if (!firstElement || !lastElement || !list.clientHeight) return false;
|
|
359
|
+
var paddingTop = getFirstElement(1).offsetTop;
|
|
359
360
|
var paddingBottom = parseFloat(getComputedStyle(list).paddingBottom);
|
|
360
|
-
|
|
361
|
-
|
|
361
|
+
var scrolled_t = (list.scrollTop - firstElement.offsetTop + paddingTop) / firstElement.offsetHeight;
|
|
362
|
+
if (scrolled_t > 1) scrolled_t -= scrolled_t | 0;
|
|
362
363
|
var last_y = currentY();
|
|
363
|
-
if (
|
|
364
|
+
if (spd[0] > 0) {
|
|
364
365
|
var target_ty = last_y + (1 - scrolled_t) * firstElement.offsetHeight;
|
|
365
366
|
} else {
|
|
366
367
|
var target_ty = last_y - scrolled_t * firstElement.offsetHeight;
|
|
367
368
|
}
|
|
368
|
-
var lastElement = getLastVisibleElement();
|
|
369
369
|
var scrolled_b = (list.scrollTop + list.clientHeight - lastElement.offsetTop - paddingBottom) / lastElement.offsetHeight;
|
|
370
|
-
if (scrolled_b
|
|
370
|
+
if (scrolled_b < 0) scrolled_b -= scrolled_b - 1 | 0;
|
|
371
|
+
if (spd[0] > 0) {
|
|
371
372
|
var target_by = last_y + (1 - scrolled_b) * lastElement.offsetHeight;
|
|
372
373
|
} else {
|
|
373
374
|
var target_by = last_y - scrolled_b * lastElement.offsetHeight;
|
|
374
375
|
}
|
|
375
376
|
var target_y = Math.abs(target_ty - last_y) > Math.abs(target_by - last_y) ? target_by : target_ty;
|
|
376
377
|
var delta = Math.min(calcPixel(60), list.clientHeight >> 2);
|
|
377
|
-
|
|
378
|
-
|
|
378
|
+
var deltay = Math.abs(target_y - last_y), y;
|
|
379
|
+
if (deltay >= delta) {
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
if (deltay < 1) y = target_y;
|
|
383
|
+
else if (deltay > count || deltay > 3) {
|
|
384
|
+
y = last_y + (target_y > last_y ? .8 : -.8);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
y = (target_y + last_y) / 2;
|
|
379
388
|
}
|
|
380
|
-
|
|
381
|
-
if (
|
|
382
|
-
|
|
389
|
+
list.Top(y);
|
|
390
|
+
if (target_y === y) {
|
|
391
|
+
return false;
|
|
383
392
|
}
|
|
384
|
-
return
|
|
393
|
+
return true;
|
|
385
394
|
};
|
|
386
395
|
//导出方法
|
|
387
396
|
list.go = scrollTo;
|
|
@@ -406,7 +415,7 @@ function ylist(container, generator, $Y, group) {
|
|
|
406
415
|
var firstVisible = getFirstVisibleElement();
|
|
407
416
|
if (!firstVisible) return saved_itemIndex;
|
|
408
417
|
var index = firstVisible.index;
|
|
409
|
-
var firstElement = getFirstElement();
|
|
418
|
+
var firstElement = getFirstElement(1);
|
|
410
419
|
var scrolled = (list.scrollTop - firstVisible.offsetTop + firstElement.offsetTop + .5 | 0) / firstVisible.offsetHeight;
|
|
411
420
|
return index + scrolled;
|
|
412
421
|
};
|
|
@@ -486,7 +495,8 @@ function list() {
|
|
|
486
495
|
var groupCount = /\d+/.exec($Y);
|
|
487
496
|
if (groupCount) groupCount = +groupCount[0];
|
|
488
497
|
$Y = /^[xh]|[xh]$/i.test($Y) ? "X" : "Y";
|
|
489
|
-
var list = ($Y === "X" ? xlist : ylist)(container, generator, $Y
|
|
498
|
+
var list = ($Y === "X" ? xlist : ylist)(container, generator, $Y);
|
|
499
|
+
if (!list.group) list.group = groupCount || 2;
|
|
490
500
|
if (bindSrc instanceof Array) {
|
|
491
501
|
list.src = bindSrc;
|
|
492
502
|
container.go(container.index() || 0);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
var test_2d = function () {
|
|
2
|
+
var m = matrix.create2d();
|
|
3
|
+
assert(m.transform([0, 1]), [0, 1])
|
|
4
|
+
m.rotate(Math.PI);
|
|
5
|
+
assert(m.transform([0, 1]), [0, -1])
|
|
6
|
+
m.rotate(Math.PI / 2);
|
|
7
|
+
assert(m.transform([1, 0]), [0, -1]);
|
|
8
|
+
assert(m.transform([0, 1]), [1, 0]);
|
|
9
|
+
}
|
|
10
|
+
test_2d();
|
package/coms/zimoli/menu.less
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
& {
|
|
2
2
|
white-space: nowrap;
|
|
3
|
+
outline: none;
|
|
3
4
|
}
|
|
4
5
|
|
|
5
6
|
&>div.lack+div.more {
|
|
@@ -114,11 +115,12 @@ body:active & {
|
|
|
114
115
|
}
|
|
115
116
|
|
|
116
117
|
&[toolbar] {
|
|
117
|
-
>menu-item{
|
|
118
|
+
>menu-item {
|
|
118
119
|
padding-left: 6px;
|
|
119
120
|
padding-right: 6px;
|
|
120
121
|
text-align: center;
|
|
121
122
|
}
|
|
123
|
+
|
|
122
124
|
>menu-item.has-children {
|
|
123
125
|
&::after {
|
|
124
126
|
display: block;
|
package/coms/zimoli/menuList.js
CHANGED
|
@@ -265,7 +265,7 @@ function main(page, items, active, direction = 'y') {
|
|
|
265
265
|
};
|
|
266
266
|
var open1 = function (event) {
|
|
267
267
|
if (event.which === 3) event.preventDefault();
|
|
268
|
-
if (istoolbar) open.call(this, event.
|
|
268
|
+
if (istoolbar) open.call(this, event.which === 3 ? 20 : 600);
|
|
269
269
|
};
|
|
270
270
|
if (!page.children.length || page.menutype === 1) {
|
|
271
271
|
page.menutype = 1;
|
|
@@ -316,7 +316,8 @@ function main(page, items, active, direction = 'y') {
|
|
|
316
316
|
a.menu = item;
|
|
317
317
|
on("mouseleave")(a, cancel);
|
|
318
318
|
on("mouseenter")(a, open);
|
|
319
|
-
|
|
319
|
+
on("pointermove")(a, open);
|
|
320
|
+
if (istoolbar) on("pointerdown")(a, open1);
|
|
320
321
|
on("click")(a, fire);
|
|
321
322
|
return a;
|
|
322
323
|
});
|
|
@@ -347,7 +348,8 @@ function main(page, items, active, direction = 'y') {
|
|
|
347
348
|
elem.menu = this.src[index];
|
|
348
349
|
on("mouseleave")(elem, cancel);
|
|
349
350
|
on("mouseenter")(elem, open);
|
|
350
|
-
|
|
351
|
+
on("pointermove")(elem, cancel);
|
|
352
|
+
if (istoolbar) on("pointerdown")(elem, open1);
|
|
351
353
|
on("click")(elem, fire);
|
|
352
354
|
return elem;
|
|
353
355
|
}, direction);
|
package/coms/zimoli/moveupon.js
CHANGED
|
@@ -35,6 +35,7 @@ function moveupon(target, { start, move, end }, initialEvent) {
|
|
|
35
35
|
};
|
|
36
36
|
var cancel = function (event) {
|
|
37
37
|
if (event.touches && event.touches.length) return;
|
|
38
|
+
if (event.touches) extendTouchEvent(event);
|
|
38
39
|
removeAllListeners();
|
|
39
40
|
if (isFunction(offmouseup)) offmouseup();
|
|
40
41
|
if (isFunction(offtouchcancel)) offtouchcancel();
|
package/coms/zimoli/on.js
CHANGED
|
@@ -330,10 +330,49 @@ if (is_addEventListener_enabled) {
|
|
|
330
330
|
}, true);
|
|
331
331
|
});
|
|
332
332
|
}
|
|
333
|
+
var invoke = function (event, type, pointerType) {
|
|
334
|
+
var target = event.target;
|
|
335
|
+
var touch = event.changedTouches ? event.changedTouches[0] : event;
|
|
336
|
+
var clickEvent = document.createEvent("MouseEvents");
|
|
337
|
+
clickEvent.touchend = true;
|
|
338
|
+
clickEvent.pointerType = pointerType
|
|
339
|
+
clickEvent.initMouseEvent(type, true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
|
|
340
|
+
dispatch(target, clickEvent);
|
|
341
|
+
};
|
|
333
342
|
|
|
343
|
+
(function () {
|
|
344
|
+
var pointeractive = null;
|
|
345
|
+
if ("onpointerdown" in window) return;
|
|
346
|
+
var getPointerType = function (event) {
|
|
347
|
+
return event.type.replace(/(start|move|end|cancel|down|up|leave|out|over|enter)$/i, '');
|
|
348
|
+
};
|
|
349
|
+
var pointerdown = function (event) {
|
|
350
|
+
if (pointeractive) return;
|
|
351
|
+
pointeractive = getPointerType(event);
|
|
352
|
+
invoke(event, 'pointerdown', pointeractive);
|
|
353
|
+
};
|
|
354
|
+
var pointerup = function (event) {
|
|
355
|
+
var pointerType = getPointerType(event);
|
|
356
|
+
if (!pointeractive || pointerType !== pointeractive) return;
|
|
357
|
+
invoke(event, 'pointerup', pointerType);
|
|
358
|
+
};
|
|
359
|
+
var pointermove = function (event) {
|
|
360
|
+
var pointerType = getPointerType(event);
|
|
361
|
+
if (pointeractive && pointerType !== pointeractive) return;
|
|
362
|
+
invoke(event, 'pointermove', pointerType);
|
|
363
|
+
};
|
|
364
|
+
on('mousedown')(window, pointerdown, true);
|
|
365
|
+
on('mouseup')(window, pointerdown, true);
|
|
366
|
+
on('touchstart')(window, pointerdown, true);
|
|
367
|
+
on("touchmove")(window, pointermove, true);
|
|
368
|
+
on("mousemove")(window, pointermove, true);
|
|
369
|
+
on("touchend")(window, pointerup, true);
|
|
370
|
+
on("touchcancel")(window, pointerup, true);
|
|
371
|
+
}());
|
|
334
372
|
|
|
335
373
|
(function () {
|
|
336
374
|
// fastclick
|
|
375
|
+
if (window.fastclick) return;
|
|
337
376
|
if (document.efronton) return on = document.efronton;
|
|
338
377
|
document.efronton = on;
|
|
339
378
|
var onclick = on("click");
|
|
@@ -371,12 +410,7 @@ if (is_addEventListener_enabled) {
|
|
|
371
410
|
if (onclick.preventClick) return;
|
|
372
411
|
needFireClick = true;
|
|
373
412
|
touchendFired = true;
|
|
374
|
-
|
|
375
|
-
var touch = event.changedTouches[0];
|
|
376
|
-
var clickEvent = document.createEvent("MouseEvents");
|
|
377
|
-
clickEvent.touchend = true;
|
|
378
|
-
clickEvent.initMouseEvent("click", true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
|
|
379
|
-
dispatch(target, clickEvent);
|
|
413
|
+
invoke(event, 'click');
|
|
380
414
|
}, true);
|
|
381
415
|
window.addEventListener("click", function (event) {
|
|
382
416
|
if (!isClickWithPointer) return;
|
package/coms/zimoli/onmounted.js
CHANGED
package/coms/zimoli/picture_.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
var mountedPictures = [];
|
|
2
|
-
on("resize")(window, function () {
|
|
3
|
-
mountedPictures.forEach(a => a.update());
|
|
4
|
-
});
|
|
5
1
|
var getstation = function (n, s) {
|
|
6
2
|
var scale = Math.pow(10, Math.round(Math.log(n) / Math.log(10)));
|
|
7
3
|
var step;
|
|
@@ -18,41 +14,34 @@ var trimCoord = move.trimCoord;
|
|
|
18
14
|
var isequal = (a, b) => a === b || Math.abs((a - b) / (a + b)) < 1e-12;
|
|
19
15
|
function picture_(image = document.createElement("div")) {
|
|
20
16
|
var image_width, image_height;
|
|
21
|
-
var scaled, x, y, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
|
|
22
|
-
var
|
|
17
|
+
var scaled = 1, x = 0, y = 0, min_scale, loaded_scale, locked_scale, click_scale, loaded_x, loaded_y;
|
|
18
|
+
var loaded_width, loaded_height;
|
|
23
19
|
var max_scale = 10 * devicePixelRatio;
|
|
24
20
|
var shape = function () {
|
|
25
|
-
image.shape(x, y, scaled / devicePixelRatio,
|
|
21
|
+
image.shape(x, y, scaled / devicePixelRatio, rotated);
|
|
22
|
+
loaded_rotate = rotated; loaded_scale = scaled;
|
|
26
23
|
};
|
|
27
24
|
image.reshape = shape;
|
|
28
25
|
var park = function () {
|
|
29
|
-
if (image.park) image.park(x, y, scaled / devicePixelRatio,
|
|
26
|
+
if (image.park) image.park(x, y, scaled / devicePixelRatio, loaded_rotate);
|
|
30
27
|
};
|
|
31
|
-
var
|
|
28
|
+
var loadParams = function () {
|
|
32
29
|
if (!image.width) return;
|
|
33
30
|
image_width = image.width / devicePixelRatio;
|
|
34
31
|
image_height = image.height / devicePixelRatio;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
locked_scale = loaded_scale = Math.min(
|
|
39
|
-
if (loaded_scale >=
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
loaded_scale = .8;
|
|
43
|
-
} else if (loaded_scale < max_scale) {
|
|
44
|
-
click_scale = loaded_scale;
|
|
45
|
-
loaded_scale = 1;
|
|
46
|
-
} else {
|
|
47
|
-
click_scale = max_scale;
|
|
48
|
-
loaded_scale = 1;
|
|
49
|
-
}
|
|
32
|
+
loaded_width = image.clientWidth;
|
|
33
|
+
loaded_height = image.clientHeight;
|
|
34
|
+
loaded_rotate = 0;
|
|
35
|
+
locked_scale = loaded_scale = Math.min(loaded_height / image_height, loaded_width / image_width);
|
|
36
|
+
if (loaded_scale >= 1) {
|
|
37
|
+
click_scale = 4;
|
|
38
|
+
loaded_scale = 1;
|
|
50
39
|
} else {
|
|
51
40
|
click_scale = 1;
|
|
52
41
|
}
|
|
53
|
-
loaded_x = (
|
|
54
|
-
loaded_y = (
|
|
55
|
-
min_scale = loaded_scale * .
|
|
42
|
+
loaded_x = (loaded_width - image_width * loaded_scale) / 2;
|
|
43
|
+
loaded_y = (loaded_height - image_height * loaded_scale) / 2;
|
|
44
|
+
min_scale = loaded_scale * .25;
|
|
56
45
|
scaled = loaded_scale;
|
|
57
46
|
x = loaded_x;
|
|
58
47
|
y = loaded_y;
|
|
@@ -65,27 +54,16 @@ function picture_(image = document.createElement("div")) {
|
|
|
65
54
|
shape();
|
|
66
55
|
};
|
|
67
56
|
|
|
68
|
-
on("append")(image,
|
|
69
|
-
|
|
70
|
-
on("append")(image, function () {
|
|
71
|
-
mountedPictures.push(image);
|
|
72
|
-
});
|
|
73
|
-
on("remove")(image, function () {
|
|
74
|
-
removeFromList(mountedPictures, image);
|
|
75
|
-
});
|
|
76
|
-
image.init = setInitParams;
|
|
57
|
+
on("append")(image, loadParams);
|
|
58
|
+
image.init = loadParams;
|
|
77
59
|
image.locked = false;
|
|
78
|
-
var last_click_time = 0;
|
|
79
60
|
|
|
80
|
-
on("
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
last_click_time = time;
|
|
84
|
-
if (delta_time > 300) return;
|
|
61
|
+
on("dblclick")(image, function (event) {
|
|
62
|
+
if (event.defaultPrevented) return;
|
|
63
|
+
event.preventDefault();
|
|
85
64
|
var image = this;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
image.locked = isequal(__scaled, loaded_scale) && isequal(loaded_x, x) && isequal(loaded_y, y);
|
|
65
|
+
loadParams();
|
|
66
|
+
image.locked = isequal(scaled, loaded_scale) && isequal(loaded_x, x) && isequal(loaded_y, y);
|
|
89
67
|
var layerx = event.offsetX || 0;
|
|
90
68
|
var layery = event.offsetY || 0;
|
|
91
69
|
if (layerx)
|
|
@@ -99,23 +77,24 @@ function picture_(image = document.createElement("div")) {
|
|
|
99
77
|
}
|
|
100
78
|
scale(layerx, layery, click_scale / loaded_scale);
|
|
101
79
|
} else {
|
|
80
|
+
click_scale = scaled;
|
|
102
81
|
set_unlock();
|
|
103
82
|
}
|
|
104
83
|
});
|
|
105
84
|
image.getScale = function () {
|
|
106
85
|
if (!this.locked && !loaded_scale) {
|
|
107
|
-
|
|
86
|
+
loadParams();
|
|
108
87
|
}
|
|
109
88
|
return +String(+scaled + 0.00005).slice(0, 6);
|
|
110
89
|
};
|
|
111
90
|
var fixpos = function () {
|
|
112
91
|
var width = image_width * scaled;
|
|
113
92
|
var height = image_height * scaled;
|
|
114
|
-
var r =
|
|
93
|
+
var r = rotated;
|
|
115
94
|
var [, , w, h] = getrotatedltwh(r);
|
|
116
95
|
var x0 = x + (width - w) / 2;
|
|
117
96
|
var y0 = y + (height - h) / 2;
|
|
118
|
-
var [x1, y1] = trimCoord([
|
|
97
|
+
var [x1, y1] = trimCoord([loaded_width, loaded_height], [x0, y0, w, h], -1);
|
|
119
98
|
x += x1 - x0;
|
|
120
99
|
y += y1 - y0;
|
|
121
100
|
};
|
|
@@ -139,6 +118,21 @@ function picture_(image = document.createElement("div")) {
|
|
|
139
118
|
var centern = (n1 + n2) / 2;
|
|
140
119
|
x = (x - centerx) * scale + centerm;
|
|
141
120
|
y = (y - centery) * scale + centern;
|
|
121
|
+
var theta = Math.atan2(n2 - n1, m2 - m1) - Math.atan2(y2 - y1, x2 - x1);
|
|
122
|
+
var r = rotated;
|
|
123
|
+
r += (theta * 180 / Math.PI);
|
|
124
|
+
image.rotateBy(theta * 180 / Math.PI);
|
|
125
|
+
// var cosa = Math.cos(theta);
|
|
126
|
+
// var sina = Math.sin(theta);
|
|
127
|
+
// var hw = image.clientWidth / 2;
|
|
128
|
+
// var hh = image.clientHeight / 2;
|
|
129
|
+
// console.log(x, y);
|
|
130
|
+
// x -= hw;
|
|
131
|
+
// y -= hh;
|
|
132
|
+
// var x0 = x * cosa - y * sina;
|
|
133
|
+
// var y0 = x * sina + y * cosa;
|
|
134
|
+
// x = x0 + hw;
|
|
135
|
+
// y = y0 + hh;
|
|
142
136
|
shape();
|
|
143
137
|
};
|
|
144
138
|
var recover = function (change) {
|
|
@@ -165,7 +159,9 @@ function picture_(image = document.createElement("div")) {
|
|
|
165
159
|
fixpos();
|
|
166
160
|
if (change || saved_x !== x || saved_y !== y) {
|
|
167
161
|
park();
|
|
162
|
+
return;
|
|
168
163
|
}
|
|
164
|
+
if (image.clientHeight && image.clientWidth) return true;
|
|
169
165
|
};
|
|
170
166
|
var move = inertia(function (deltax, deltay) {
|
|
171
167
|
var saved_x = x, saved_y = y;
|
|
@@ -174,12 +170,12 @@ function picture_(image = document.createElement("div")) {
|
|
|
174
170
|
shape();
|
|
175
171
|
if (saved_x === x && saved_y === y) return false;
|
|
176
172
|
});
|
|
177
|
-
var saved_event
|
|
173
|
+
var saved_event;
|
|
178
174
|
onmousewheel(image, function (event) {
|
|
179
175
|
var { offsetX: layerX, offsetY: layerY, deltaY } = event;
|
|
180
176
|
if (this.locked) event.preventDefault();
|
|
181
177
|
if (!deltaY) return;
|
|
182
|
-
if (!this.locked)
|
|
178
|
+
if (!this.locked) loadParams();
|
|
183
179
|
this.locked = true;
|
|
184
180
|
var ratio = Math.pow(0.99, 20 * Math.atan(deltaY / 20));
|
|
185
181
|
var __scaled = scaled;
|
|
@@ -199,7 +195,7 @@ function picture_(image = document.createElement("div")) {
|
|
|
199
195
|
saved_event = event;
|
|
200
196
|
event.moveLocked = scaled > locked_scale;
|
|
201
197
|
if (!this.locked) {
|
|
202
|
-
|
|
198
|
+
loadParams();
|
|
203
199
|
}
|
|
204
200
|
move.reset();
|
|
205
201
|
},
|
|
@@ -215,7 +211,6 @@ function picture_(image = document.createElement("div")) {
|
|
|
215
211
|
|
|
216
212
|
switch (event.touches.length) {
|
|
217
213
|
case 1:
|
|
218
|
-
if (!this.locked) return;
|
|
219
214
|
break;
|
|
220
215
|
case 2:
|
|
221
216
|
this.locked = true;
|
|
@@ -253,13 +248,13 @@ function picture_(image = document.createElement("div")) {
|
|
|
253
248
|
}
|
|
254
249
|
saved_event = null;
|
|
255
250
|
event.moveLocked = scaled >= locked_scale;
|
|
256
|
-
|
|
257
|
-
if (this.locked && onclick.preventClick) move.smooth(recover);
|
|
251
|
+
if (this.locked && onclick.preventClick) move.smooth();
|
|
258
252
|
}
|
|
259
253
|
});
|
|
260
|
-
var
|
|
254
|
+
var loaded_rotate = 0, rotated = 0;
|
|
261
255
|
var rotatexy = function (x1, y1, x2, y2) {
|
|
262
|
-
var
|
|
256
|
+
var { left, top } = getScreenPosition(image);
|
|
257
|
+
var centerx = left + image.clientLeft + image.clientWidth / 2, centery = top + image.clientTop + image.clientHeight / 2;
|
|
263
258
|
var deltax = x2 - x1, deltay = y2 - y1;
|
|
264
259
|
var rx = x1 - centerx, ry = y1 - centery;
|
|
265
260
|
var sign = -ry * deltax + rx * deltay;
|
|
@@ -268,22 +263,22 @@ function picture_(image = document.createElement("div")) {
|
|
|
268
263
|
if (sign) image.rotateBy(sign > 0 ? delta : -delta);
|
|
269
264
|
}
|
|
270
265
|
var updatexy = function () {
|
|
271
|
-
var deg =
|
|
266
|
+
var deg = rotated - loaded_rotate;
|
|
272
267
|
if (isFinite(deg)) {
|
|
273
|
-
|
|
268
|
+
loaded_rotate = rotated;
|
|
274
269
|
[x, y] = getrotatedltwh(deg, scaled);
|
|
275
270
|
}
|
|
276
271
|
};
|
|
277
272
|
var getrotatedltwh = function (a, s = scaled) {
|
|
278
273
|
var w = image_width * s;
|
|
279
274
|
var h = image_height * s;
|
|
280
|
-
var c = [
|
|
275
|
+
var c = [loaded_width / 2, loaded_height / 2];
|
|
281
276
|
var m = x + w / 2;
|
|
282
277
|
var n = y + h / 2;
|
|
283
278
|
var [c1, c2] = rotate([m, n], -a, c);
|
|
284
279
|
c1 -= w / 2;
|
|
285
280
|
c2 -= h / 2;
|
|
286
|
-
var a =
|
|
281
|
+
var a = loaded_rotate;
|
|
287
282
|
var l = c[0] - w / 2;
|
|
288
283
|
var r = l + w;
|
|
289
284
|
var t = c[1] - h / 2;
|
|
@@ -301,29 +296,29 @@ function picture_(image = document.createElement("div")) {
|
|
|
301
296
|
image.update = function (animate) {
|
|
302
297
|
if (image.locked) {
|
|
303
298
|
updatexy();
|
|
304
|
-
x += (image.clientWidth -
|
|
305
|
-
y += (image.clientHeight -
|
|
306
|
-
|
|
307
|
-
|
|
299
|
+
x += (image.clientWidth - loaded_width) / 2;
|
|
300
|
+
y += (image.clientHeight - loaded_height) / 2;
|
|
301
|
+
loaded_height = image.clientHeight;
|
|
302
|
+
loaded_width = image.clientWidth;
|
|
308
303
|
if (animate !== false) fixpos();
|
|
309
304
|
shape();
|
|
310
305
|
return;
|
|
311
306
|
}
|
|
312
|
-
|
|
307
|
+
loadParams();
|
|
313
308
|
if (animate !== false) {
|
|
314
|
-
recover
|
|
309
|
+
move.smooth(recover);
|
|
315
310
|
} else {
|
|
316
|
-
if (animate !== false) fixpos();
|
|
317
311
|
shape();
|
|
318
312
|
}
|
|
319
|
-
|
|
320
313
|
};
|
|
314
|
+
bind('resize')(image, image.update);
|
|
315
|
+
|
|
321
316
|
image.rotateTo = function (deg) {
|
|
322
|
-
|
|
317
|
+
rotated = deg;
|
|
323
318
|
this.update();
|
|
324
319
|
};
|
|
325
320
|
image.rotateBy = function (deg) {
|
|
326
|
-
var r =
|
|
321
|
+
var r = rotated;
|
|
327
322
|
if (deg === 90 || deg === -90) {
|
|
328
323
|
r += deg;
|
|
329
324
|
if (deg > 0) {
|
|
@@ -346,9 +341,10 @@ function picture_(image = document.createElement("div")) {
|
|
|
346
341
|
} else {
|
|
347
342
|
r += deg;
|
|
348
343
|
}
|
|
349
|
-
|
|
344
|
+
rotated = r;
|
|
350
345
|
this.update(deg === 90 || deg === -90);
|
|
351
346
|
};
|
|
347
|
+
on('remove')(image, move.reset);
|
|
352
348
|
on("contextmenu")(image, function (e) {
|
|
353
349
|
if (onclick.preventClick) e.preventDefault();
|
|
354
350
|
});
|
package/coms/zimoli/render.js
CHANGED
|
@@ -3,6 +3,8 @@ var renderElements = Object.create(null);
|
|
|
3
3
|
var presets = Object.create(null);
|
|
4
4
|
presets.template = function (t) {
|
|
5
5
|
var comment = document.createComment('template');
|
|
6
|
+
comment.$scope = t.$scope;
|
|
7
|
+
comment.$parentScopes = t.$parentScopes;
|
|
6
8
|
once("append")(comment, function () {
|
|
7
9
|
var node = document.createElement(comment.parentNode.tagName || "div");
|
|
8
10
|
node.innerHTML = t.innerHTML;
|
package/coms/zimoli/slider.js
CHANGED
|
@@ -123,17 +123,18 @@ function slider(autoplay, circle = true) {
|
|
|
123
123
|
var park = function () {
|
|
124
124
|
direction = 0;
|
|
125
125
|
var singleTarget = getSingleTarget();
|
|
126
|
+
var spd = _speed();
|
|
126
127
|
if (singleTarget) {
|
|
127
128
|
negative_index = round(negative_index);
|
|
128
129
|
}
|
|
129
130
|
else if (delta_negative_index > 0) {
|
|
130
|
-
if (negative_index - floor(negative_index) > 0.2 / (1 +
|
|
131
|
+
if (negative_index - floor(negative_index) > 0.2 / (1 + abs(spd)))
|
|
131
132
|
negative_index = ceil(negative_index);
|
|
132
133
|
else
|
|
133
134
|
negative_index = floor(negative_index);
|
|
134
135
|
}
|
|
135
136
|
else if (delta_negative_index < 0) {
|
|
136
|
-
if (ceil(negative_index) - negative_index > 0.2 / (1 +
|
|
137
|
+
if (ceil(negative_index) - negative_index > 0.2 / (1 + abs(spd)))
|
|
137
138
|
negative_index = floor(negative_index);
|
|
138
139
|
else
|
|
139
140
|
negative_index = ceil(negative_index);
|
|
@@ -239,6 +240,7 @@ function slider(autoplay, circle = true) {
|
|
|
239
240
|
});
|
|
240
241
|
moveupon(outter, {
|
|
241
242
|
start(event) {
|
|
243
|
+
event.preventDefault();
|
|
242
244
|
cancelAnimationFrame(timer_animate);
|
|
243
245
|
clearTimeout(timer_playyer);
|
|
244
246
|
moving = true;
|
package/coms/zimoli/speed.js
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
if (
|
|
7
|
-
if (
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
else if (deltay === 0) speed = 0;
|
|
11
|
-
}
|
|
12
|
-
} else if (deltat > 120) {
|
|
13
|
-
speed = 0;
|
|
1
|
+
|
|
2
|
+
function speed() {
|
|
3
|
+
var speed = new Speed();
|
|
4
|
+
return function (a) {
|
|
5
|
+
var now = performance.now ? performance.now() : Date.now();
|
|
6
|
+
if (isFinite(a)) {
|
|
7
|
+
if (a === 0) speed.reset();
|
|
8
|
+
else speed.write([a], now);
|
|
9
|
+
return a;
|
|
14
10
|
}
|
|
15
|
-
return speed;
|
|
11
|
+
return speed.read(now)[0];
|
|
16
12
|
};
|
|
17
13
|
}
|