efront 3.25.7 → 3.25.11

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.
Files changed (41) hide show
  1. package/apps/_index.html +1 -1
  2. package/coms/basic/Item.js +13 -3
  3. package/coms/basic/Speed.js +36 -17
  4. package/coms/basic/Tree.js +4 -4
  5. package/coms/{zimoli → basic}/cancelAnimationFrame.js +1 -0
  6. package/coms/basic/lazy.js +29 -12
  7. package/coms/basic/loader.js +12 -9
  8. package/coms/basic/mark.js +1 -1
  9. package/coms/basic/mark_test.js +7 -0
  10. package/coms/basic/renderExpress.js +3 -3
  11. package/coms/frame/route.js +12 -3
  12. package/coms/kugou/playList.less +6 -0
  13. package/coms/zimoli/bindAccesskey.js +13 -5
  14. package/coms/zimoli/button.js +2 -1
  15. package/coms/zimoli/getGenerator.js +24 -8
  16. package/coms/zimoli/getName.js +7 -5
  17. package/coms/zimoli/hexagon.js +33 -0
  18. package/coms/zimoli/innerHeight.js +2 -1
  19. package/coms/zimoli/innerWidth.js +2 -1
  20. package/coms/zimoli/list.js +146 -17
  21. package/coms/zimoli/menu.js +7 -3
  22. package/coms/zimoli/menuItem.html +8 -3
  23. package/coms/zimoli/menuItem.js +2 -2
  24. package/coms/zimoli/menuItem.less +3 -2
  25. package/coms/zimoli/menuList.js +188 -196
  26. package/coms/zimoli/menuList.less +1 -1
  27. package/coms/zimoli/moveupon.js +1 -0
  28. package/coms/zimoli/on.js +54 -16
  29. package/coms/zimoli/onmousewheel.js +1 -1
  30. package/coms/zimoli/popup.js +17 -22
  31. package/coms/zimoli/render.js +7 -5
  32. package/coms/zimoli/resize.js +1 -0
  33. package/coms/zimoli/slider.js +23 -9
  34. package/coms/zimoli/slider_test.js +1 -1
  35. package/coms/zimoli/table.js +7 -1
  36. package/coms/zimoli/touchList.js +22 -20
  37. package/coms/zimoli/vbox.js +11 -8
  38. package/docs/main.js +3 -0
  39. package/package.json +2 -2
  40. package/public/efront.js +1 -1
  41. package/coms/zimoli/menuList.html +0 -6
package/coms/zimoli/on.js CHANGED
@@ -1,9 +1,28 @@
1
1
  // "use strict";
2
2
  if (document.efronton) return document.efronton;
3
3
  var is_addEventListener_enabled = "addEventListener" in window;
4
+ // Edg 禁用passive原因:无滚动条的元素上纵向滚动时触发整个页面回弹
5
+ // Chrome 禁用passive原因:无滚动条的元素上横向滚动触发浏览器导航
6
+ var supportPassive = false, preventPassive = /Edg|Chrome/.test(navigator.userAgent);
7
+ if (is_addEventListener_enabled) try {
8
+ window.addEventListener('test', null, { get passive() { return supportPassive = true } });
9
+ } catch { }
10
+
11
+ var listenerOptions = [];
12
+ /**
13
+ * @param {EventNeed} eventtype
14
+ */
15
+ var getListenerOption = function (eventtype, k) {
16
+ if (!supportPassive || preventPassive && /wheel$/.test(k)) return eventtype.capture;
17
+ var index = +eventtype.capture | +eventtype.passive << 1;
18
+ if (!listenerOptions[index]) listenerOptions[index] = { capture: eventtype.capture, passive: eventtype.passive };
19
+ return listenerOptions[index];
20
+ };
21
+
4
22
  if ('attachEvent' in document) {
5
23
  is_addEventListener_enabled = false;
6
24
  }
25
+
7
26
  if (!is_addEventListener_enabled) var __call = function (target, context, handler, firstmost) {
8
27
  // use strict 无效的情况
9
28
  if (isEmpty(target)) {
@@ -16,7 +35,7 @@ if (!is_addEventListener_enabled) var __call = function (target, context, handle
16
35
 
17
36
  var handlersMap = {};
18
37
  var changes_key = 'changes';
19
- var eventtypereg = /(?:\.once|\.prevent|\.stop|\.capture|\.self|\.passive|\.[a-z0-9]+)+\.?$/i;
38
+ var eventtypereg = /(?:\.once|\.prevent|\.stop|\.capture|\.self|\.passive|\.only|\.[!-~←↑→↓⇄↵⨉]+)+\.?$/i;
20
39
  var keyCodeMap = {
21
40
  backspace: 8,
22
41
  tab: 9,
@@ -134,24 +153,25 @@ var keyCodeMap = {
134
153
  "\"": 222,
135
154
  bright: 255,
136
155
  };
156
+ class EventNeed {
157
+ once = false;
158
+ stop = false;
159
+ capture = false;
160
+ self = false;
161
+ prevent = false;
162
+ passive = false;
163
+ keyNeed = [];
164
+ keyCode = 0
165
+ };
137
166
  var parseEventTypes = function (eventtypes) {
138
- var types = {
139
- once: false,
140
- stop: false,
141
- capture: false,
142
- self: false,
143
- prevent: false,
144
- passive: false,
145
- keyNeed: [],
146
- keyCode: 0,
147
- };
167
+ var types = new EventNeed;
148
168
  var keyneed = types.keyNeed;
149
169
  eventtypes = eventtypereg.exec(eventtypes);
150
170
  if (eventtypes) eventtypes = eventtypes[0].slice(1);
151
171
  if (eventtypes) {
152
172
  var etypes = eventtypes.split(".");
153
173
  etypes.forEach(t => {
154
- if (t.length === 1) {
174
+ if (t.length === 1 && /^[0-9a-zA-Z]$/.test(t)) {
155
175
  types.keyCode = t.toUpperCase().charCodeAt(0);
156
176
  return;
157
177
  }
@@ -166,7 +186,9 @@ var parseEventTypes = function (eventtypes) {
166
186
  keyneed.push(t);
167
187
  break;
168
188
  case "":
189
+ case "only":
169
190
  if (!types.keyCode) types.keyCode = true;
191
+ types.only = true;
170
192
  break;
171
193
  default:
172
194
  if (isFinite(t)) {
@@ -175,6 +197,9 @@ var parseEventTypes = function (eventtypes) {
175
197
  else if (keyCodeMap[t]) {
176
198
  types.keyCode = keyCodeMap[t];
177
199
  }
200
+ else {
201
+ throw new Error(`绑定事件参数无效${t}`);
202
+ }
178
203
 
179
204
  }
180
205
 
@@ -182,14 +207,25 @@ var parseEventTypes = function (eventtypes) {
182
207
  }
183
208
  return types;
184
209
  }
210
+ /**
211
+ * @param {EventNeed} eventtypes
212
+ * @param {Event} e;
213
+ */
185
214
  function checkKeyNeed(eventtypes, e) {
186
215
  var keyneed = eventtypes.keyNeed;
216
+ var keykeep = {}
187
217
  if (eventtypes.keyNeed) {
188
218
  for (var cx = 0, dx = keyneed.length; cx < dx; cx++) {
189
219
  var key = keyneed[cx];
220
+ keykeep[key] = true;
190
221
  if (!e[key + "Key"]) return false;
191
222
  }
192
223
  }
224
+ if (eventtypes.only) {
225
+ for (var key of ["meta", 'shift', 'ctrl', 'alt']) {
226
+ if (!keykeep[key] && e[key + "Key"]) return false;
227
+ }
228
+ }
193
229
  if (eventtypes.keyCode === true) {
194
230
  for (var cx = 0, dx = keyneed.length; cx < dx; cx++) {
195
231
  var key = keyneed[cx];
@@ -232,7 +268,7 @@ var remove = function (k, hk, [eventtypes, handler, context]) {
232
268
  if (!hs.length && hs.h) {
233
269
  element[hk] = null;
234
270
  if (is_addEventListener_enabled) {
235
- element.removeEventListener(k, hs.h, /1$/.test(hk));
271
+ element.removeEventListener(k, hs.h, getListenerOption(eventtypes, k));
236
272
  } else {
237
273
  if (element["on" + k] === hs.h) element["on" + k] = null;
238
274
  }
@@ -242,6 +278,7 @@ var remove = function (k, hk, [eventtypes, handler, context]) {
242
278
  var broadcast = function (k, hk, event) {
243
279
  var element = this;
244
280
  var handlers = element[hk];
281
+ if (!handlers) console.log(handlers, hk, event, element)
245
282
  if (handlers.length > 1) handlers = handlers.slice();
246
283
  if (event.which === 1 && event.buttons === 0) {
247
284
  // firefox 无按键
@@ -259,7 +296,7 @@ var broadcast = function (k, hk, event) {
259
296
  if (eventtypes.self && event.target !== element) continue;
260
297
  if (!checkKeyNeed(eventtypes, event)) continue;
261
298
  if (eventtypes.stop) event.stopPropagation();
262
- if (eventtypes.passive) event.preventDefault = function () { };
299
+ if (eventtypes.passive && !preventPassive) event.preventDefault = function () { };
263
300
  if (eventtypes.prevent) event.preventDefault();
264
301
  if (handler instanceof Array) {
265
302
  for (var h of handler) {
@@ -305,6 +342,7 @@ var on = document.efronton = function (k) {
305
342
  k = k.replace(eventtypereg, '');
306
343
  var handler_path = k + "handlers";
307
344
  var hk = handler_path + +!!eventtypes.capture;
345
+ if (supportPassive) hk += +!!eventtypes.passive;
308
346
  if (is_addEventListener_enabled) var addhandler = function (context, handler, firstmost = false) {
309
347
  var target = this || context;
310
348
  target = checkroot(target, k);
@@ -313,7 +351,7 @@ var on = document.efronton = function (k) {
313
351
  var h = broadcast.bind(target, k, hk);
314
352
  target[hk] = [];
315
353
  target[hk].h = h;
316
- target.addEventListener(k, h, eventtypes.capture);
354
+ target.addEventListener(k, h, getListenerOption(eventtypes, k));
317
355
  }
318
356
  var listener = [eventtypes, handler, context];
319
357
  append.call(target, k, hk, listener, firstmost);
@@ -459,7 +497,7 @@ var invoke = function (event, type, pointerType) {
459
497
  isClickWithPointer = false;
460
498
  var saved_time = lasttime_click;
461
499
  lasttime_click = event.timeStamp;
462
- if (!need || lasttime_click - saved_time < 60 || onclick.preventClick || touchendFired && !event.touchend) {
500
+ if (!need || lasttime_click - saved_time < 120 || onclick.preventClick || touchendFired && !event.touchend) {
463
501
  // 阻止非人为点击,防止误操作
464
502
  event.preventDefault();
465
503
  event.stopPropagation();
@@ -1,4 +1,4 @@
1
- var _onmousewheel = "onmousewheel" in window || "onmousewheel" in document ? on("mousewheel") : on("DOMMouseScroll");
1
+ var _onmousewheel = "onmousewheel" in window || "onmousewheel" in document ? on("mousewheel.passive") : on("DOMMouseScroll.passive");
2
2
  var addDeltaY = function (event) {
3
3
  if (isNumber(event.deltaY)) return;
4
4
  if (isNumber(event.wheelDeltaY)) {
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * 弹出层
3
3
  */
4
- onkeydown(document, function (e) {
5
- if (e.which === 27 && rootElements.length) {
4
+ on("keydown.esc.only")(document, function (e) {
5
+ if (e.defaultPrevented) return;
6
+ if (rootElements.length) {
6
7
  var r = rootElements.pop();
7
8
  if (r) {
8
9
  r.blur();
@@ -235,19 +236,16 @@ var _as_yextra = function (global, innerWidth, innerHeight, element, target, poi
235
236
  var zindex = zIndex(0) + 1;
236
237
  css(element, `position:absolute;z-index:${zindex}`);
237
238
  css(_rhomb, { zIndex: zindex });
238
- var release1 = onremove(target, function () {
239
- remove(element);
240
- });
241
- var release2 = onremove(element, function () {
242
- release1();
243
- release2();
244
- remove(_rhomb);
245
- if (document.removeEventListener) {
246
- document.removeEventListener("scroll", reshape, true);
247
- window.removeEventListener("resize", reshape);
248
- }
239
+ onmounted(element, function () {
240
+ var release1 = onremove(target, function () {
241
+ remove(element);
242
+ });
243
+ var release2 = onremove(element, function () {
244
+ release1();
245
+ release2();
246
+ remove(_rhomb);
247
+ });
249
248
  });
250
- global(element, false);
251
249
  var reshape = function () {
252
250
  extend(element.style, element.origin);
253
251
  var position = getScreenPosition(target);
@@ -290,7 +288,6 @@ var _as_yextra = function (global, innerWidth, innerHeight, element, target, poi
290
288
  }
291
289
  var side;
292
290
  if (aimedWidth !== originWidth) {
293
- console.log(originWidth,aimedWidth)
294
291
  css(element, { width: fromOffset(aimedWidth) });
295
292
  }
296
293
  if (position.top + element.offsetHeight + position.height > innerHeight) {
@@ -333,13 +330,11 @@ var _as_yextra = function (global, innerWidth, innerHeight, element, target, poi
333
330
  } else if (_rhomb && !_rhomb.parentNode) {
334
331
  appendChild.before(element, _rhomb)
335
332
  }
336
- }
337
- if (document.addEventListener) {
338
- document.addEventListener("scroll", reshape, true);
339
- window.addEventListener("resize", reshape);
340
- }
341
- reshape();
342
- lazy(reshape)();
333
+ };
334
+ bind("resize")(element, reshape);
335
+ bind("scroll.capture.passive", document)(element, reshape);
336
+ onmounted(element, reshape);
337
+ global(element, false);
343
338
  };
344
339
  var _as_xextra = arriswise(_as_yextra, arguments);
345
340
  var popup_as_single = function (element) {
@@ -97,7 +97,8 @@ var createComment = function (renders, type, expression) {
97
97
  appendChild.after(this, comment);
98
98
  if (!/^if|^else/i.test(type)) remove(this);
99
99
  }
100
- comment.template = this;
100
+ comment.$template = this;
101
+ this.$comment = comment;
101
102
  return comment;
102
103
  };
103
104
 
@@ -173,7 +174,7 @@ var createRepeat = function (search, id = 0) {
173
174
  var $parentScopes = element.$parentScopes || [];
174
175
  var $struct = element.$struct;
175
176
  if (element.$scope) {
176
- $struct = extend({}, $struct, { context: $struct.context + `with(this.$parentScopes[${$parentScopes.length}])` }), $parentScopes = $parentScopes.concat(element.$scope);
177
+ $struct = extend({}, $struct, { context: $struct.context + `with(this.$parentScopes[${$parentScopes.length}])` }), $parentScopes = $parentScopes.slice(), $parentScopes.push(element.$scope);
177
178
  }
178
179
  var clonedElements1 = Object.create(null);
179
180
  var cloned = keys.map(function (key, cx) {
@@ -247,15 +248,16 @@ var createIf = function (search, id = 0) {
247
248
  for (var cx = 0, dx = elements.length; cx < dx; cx += 2) {
248
249
  var c = elements[cx];
249
250
  if (cx === shouldMount) {
250
- var e = c.template;
251
+ var e = c.$template;
251
252
  appendChild.after(c, e);
252
253
  if (e.renderid < 0) {
253
254
  e.renderid = id;
254
- c.template = render(e, this.$scope, this.$parentScopes);
255
+ e = c.$template = render(e, this.$scope, this.$parentScopes);
256
+ e.$comment = c;
255
257
  }
256
258
  }
257
259
  else {
258
- remove(c.template);
260
+ remove(c.$template);
259
261
  }
260
262
  }
261
263
 
@@ -155,6 +155,7 @@ resize.on = function (elem, dragHandle) {
155
155
  if (elem) {
156
156
  elem.dragHandle = dragHandle;
157
157
  }
158
+ elem.resizable = true;
158
159
  onmounted(elem, function () {
159
160
  if (!offmousemove) offmousemove = onmousemove(window, getResizer);
160
161
  if (!~resizingElements.indexOf(elem)) {
@@ -112,29 +112,40 @@ function slider(autoplay, circle = true) {
112
112
  left: round((indexRight - index) * width) + "px"
113
113
  });
114
114
  };
115
+ var savedtime = 0;
116
+ var animate0 = function () {
117
+ savedtime = Speed.now() - 1;
118
+ animate();
119
+ };
115
120
  var animate = function () {
116
121
  cancelAnimationFrame(timer_animate);
117
122
  var width = outter.clientWidth;
123
+ var now = +Speed.now();
118
124
  if (abs(current_index + negative_index) < 1.25 / width)
119
125
  return reshape(-negative_index, false);
120
126
  timer_animate = requestAnimationFrame(animate);
121
- reshape((current_index * 3 - negative_index) / 4);
127
+ var temp_index = current_index;
128
+ while (savedtime < now) {
129
+ temp_index = (temp_index * 11 - negative_index) / 12;
130
+ savedtime += 6;
131
+ }
132
+ reshape(temp_index);
122
133
  };
123
134
  var park = function () {
124
135
  direction = 0;
125
136
  var singleTarget = getSingleTarget();
126
- var spd = _speed();
137
+ var spd = _speed() * 40;
127
138
  if (singleTarget) {
128
139
  negative_index = round(negative_index);
129
140
  }
130
141
  else if (delta_negative_index > 0) {
131
- if (negative_index - floor(negative_index) > 0.2 / (1 + abs(spd)))
142
+ if (negative_index - floor(negative_index) > .007 / (.07 + abs(spd)))
132
143
  negative_index = ceil(negative_index);
133
144
  else
134
145
  negative_index = floor(negative_index);
135
146
  }
136
147
  else if (delta_negative_index < 0) {
137
- if (ceil(negative_index) - negative_index > 0.2 / (1 + abs(spd)))
148
+ if (ceil(negative_index) - negative_index > .007 / (.07 + abs(spd)))
138
149
  negative_index = floor(negative_index);
139
150
  else
140
151
  negative_index = ceil(negative_index);
@@ -142,7 +153,8 @@ function slider(autoplay, circle = true) {
142
153
  else {
143
154
  negative_index = round(negative_index);
144
155
  }
145
- animate();
156
+ savedtime = 0;
157
+ animate0();
146
158
  var event = createEvent("park");
147
159
  event.index = -negative_index;
148
160
  dispatch(outter, event);
@@ -176,7 +188,7 @@ function slider(autoplay, circle = true) {
176
188
  if (enabled) outter.go(outter.index + count);
177
189
  } else {
178
190
  if (enabled) negative_index -= count;
179
- animate();
191
+ animate0();
180
192
  }
181
193
  return enabled;
182
194
  };
@@ -186,7 +198,7 @@ function slider(autoplay, circle = true) {
186
198
  var singleTarget = getSingleTarget();
187
199
  if (singleTarget) {
188
200
  var current_Left = singleTarget.offsetLeft;
189
- var avail_deltaWidth = round(width >> 2);
201
+ var avail_deltaWidth = Math.min(round(width >> 2), 120);
190
202
  if (current_Left + deltax > avail_deltaWidth) {
191
203
  deltax = avail_deltaWidth - current_Left;
192
204
  saved_x += deltax;
@@ -274,8 +286,10 @@ function slider(autoplay, circle = true) {
274
286
  css(_imageMain, "z-index:0;transform:scale(.92);opacity:0;transition:none");
275
287
  setTimeout(() => css(_imageMain, "transform:scale(1);opacity:1;transition:.2s transform ease-out,.4s opacity"), 0);
276
288
  if (player.ing) play();
277
- return outter;
278
- }, 20);
289
+ }, 20, outter);
290
+ onmounted(outter, function () {
291
+ reshape(current_index);
292
+ });
279
293
  outter.play = function (schedule = player.schedule, _isMiss) {
280
294
  if (isDefined(_isMiss)) {
281
295
  isMiss = _isMiss;
@@ -10,7 +10,7 @@ render(page, {
10
10
  return ele;
11
11
  });
12
12
  var _slider = slider(images, 0 !== +element.getAttribute("circle"));
13
- _slider.go(0).play();
13
+ _slider.play();
14
14
  window.Slider = _slider;
15
15
  return _slider;
16
16
  }
@@ -424,10 +424,12 @@ function table(elem) {
424
424
  var $scope = {
425
425
  fields,
426
426
  isEmpty,
427
+ tbody0: null,
427
428
  tbody(e) {
428
429
  var e = list.apply(null, arguments);
429
430
  css(e, tbodyHeight(e));
430
431
  css(e, { width: this.adapter.offsetWidth, display: 'block' });
432
+ this.tbody0 = e;
431
433
  return e;
432
434
  },
433
435
  thead(t) {
@@ -440,7 +442,7 @@ function table(elem) {
440
442
  return tr;
441
443
  },
442
444
  tbodyHeight,
443
- data: Table.from(fields, await data),
445
+ data,
444
446
  adapter: null,
445
447
  resizeT,
446
448
  model,
@@ -455,6 +457,10 @@ function table(elem) {
455
457
  pagination
456
458
  };
457
459
  render(this, $scope, this.$parentScopes.concat(this.$scope));
460
+ $scope.data = Table.from(fields, await data);
461
+ $scope.data.callback = function () {
462
+ if ($scope.tbody0) $scope.tbody0.go($scope.tbody0.index());
463
+ };
458
464
  })
459
465
  autodragchildren(
460
466
  table,
@@ -24,7 +24,7 @@ var touchstart = function (event) {
24
24
  }
25
25
  if (!target) return;
26
26
  cancelAnimationFrame(target.scrollTimer);
27
- saved_x = null;
27
+ saved_x = event.clientX, saved_y = event.clientY, moving = false, 0;
28
28
  currentTarget = target;
29
29
  if (!target.querySelector(".ylife-touch-delete")) {
30
30
  css(target, {
@@ -37,11 +37,10 @@ var touchstart = function (event) {
37
37
  };
38
38
  var moving = false;
39
39
  var touchmove = function (event) {
40
- if (!saved_x) return saved_x = event.clientX, saved_y = event.clientY, moving = false, 0;
41
40
  var delta_x = event.clientX - saved_x;
42
41
  var delta_y = event.clientY - saved_y;
43
42
  if (!moving) {
44
- if (Math.abs(delta_x) < 2 && Math.abs(delta_y) < 2) return;
43
+ if (Math.abs(delta_x) < MOVELOCK_DELTA && Math.abs(delta_y) < MOVELOCK_DELTA) return;
45
44
  if (Math.abs(delta_y) < Math.abs(delta_x)) {
46
45
  moving = 1;
47
46
  } else {
@@ -49,28 +48,35 @@ var touchmove = function (event) {
49
48
  }
50
49
  }
51
50
  if (moving !== 1) return;
52
- event.preventDefault();
53
- var marginLeft = -parseInt(currentTarget.scrollLeft) || 0;
54
- if (delta_x + marginLeft > 0) {
55
- delta_x = -marginLeft;
51
+ event.moveLocked = true;
52
+ var buttonWidth = currentTarget.scrollWidth - currentTarget.clientWidth;
53
+ var scrollLeft = -currentTarget.scrollLeft;
54
+ if (delta_x + scrollLeft > 0) {
55
+ delta_x = -scrollLeft;
56
56
  }
57
- else if (delta_x + marginLeft < - calcPixel(85)) {
58
- delta_x = -calcPixel(85) - marginLeft;
57
+ else if (delta_x + scrollLeft < - buttonWidth) {
58
+ delta_x = -buttonWidth - scrollLeft;
59
59
  }
60
- marginLeft += delta_x;
60
+ scrollLeft += delta_x;
61
61
  saved_x += delta_x;
62
62
  direction = delta_x;
63
- currentTarget.scrollLeft = -marginLeft;
63
+ currentTarget.scrollLeft = -scrollLeft;
64
64
  };
65
65
  var scrollTo = function (targetLeft) {
66
66
  if (!this) return;
67
67
  cancelAnimationFrame(this.scrollTimer);
68
68
  var that = this;
69
+ var scrollTime = +Speed.now();
69
70
  var reshape = function () {
70
- var currentLeft = parseInt(that.scrollLeft) || 0;
71
+ var currentLeft = that.scrollLeft;
71
72
  if (0 === (0 | currentLeft - targetLeft)) return;
72
- var thisTimeLeft = (targetLeft + currentLeft * 3) / 4 | 0;
73
- if (Math.abs(thisTimeLeft - currentLeft) < 3) {
73
+ var now = +Speed.now();
74
+ var thisTimeLeft = currentLeft;
75
+ while (scrollTime < now) {
76
+ scrollTime += 6;
77
+ thisTimeLeft = (thisTimeLeft * 11 + targetLeft) / 12;
78
+ }
79
+ if (Math.abs(thisTimeLeft - currentLeft) < .5) {
74
80
  thisTimeLeft = targetLeft;
75
81
  } else {
76
82
  that.scrollTimer = requestAnimationFrame(reshape);
@@ -94,10 +100,10 @@ var scrollToRight = function () {
94
100
  var touchend = function () {
95
101
  var marginLeft = -parseInt(currentTarget.scrollLeft) || 0;
96
102
  moving = false;
97
- if (direction < 0 && marginLeft < -calcPixel(20)) {
103
+ if (direction < 0 && marginLeft < -7) {
98
104
  scrollToLeft.call(currentTarget);
99
105
  }
100
- else if (direction > 0 && marginLeft > -currentTarget.clientWidth + calcPixel(20)) {
106
+ else if (direction > 0 && marginLeft > -currentTarget.clientWidth + 7) {
101
107
  scrollToRight.call(currentTarget);
102
108
  }
103
109
  else if (marginLeft < currentTarget.clientWidth - currentTarget.scrollWidth >> 1) {
@@ -130,9 +136,5 @@ function touchList(listElement) {
130
136
  move: touchmove,
131
137
  end: touchend
132
138
  });
133
- // ontouchstart(listElement, touchstart);
134
- // ontouchmove(listElement, touchmove);
135
- // ontouchend(listElement, touchend);
136
- // ontouchcancel(listElement, touchend);
137
139
  return listElement;
138
140
  }
@@ -60,9 +60,11 @@ function ybox(generator) {
60
60
  var increaser_t = document.createElement("insert");
61
61
  addClass(increaser_t, 'y-insert');
62
62
  var increaser_b = increaser_t.cloneNode();
63
+ increaser_b.height = 0;
64
+ increaser_t.height = 0;
63
65
  var increase_height = calcPixel(100);
64
- var _decrease = function (increaser) {
65
- var height = parseInt(increaser.height);
66
+ var _decrease = function (increaser, t) {
67
+ var height = increaser.height;
66
68
  if (height > 1) {
67
69
  var scrollTop = _box.$Top();
68
70
  if (scrollTop > 0 && increaser_t === increaser) {
@@ -76,8 +78,9 @@ function ybox(generator) {
76
78
  var deltaY = tH - bH - scrollTop > height ? height : tH - bH - scrollTop;
77
79
  height -= deltaY;
78
80
  }
79
- increaser.height = height = height > 16 ? (height * 2 + 6) / 3 : height >> 1;
80
- increaser.style.height = fromOffset(height | 0);
81
+ height = height * Math.pow(.92, t / 6);
82
+ increaser.height = height
83
+ increaser.style.height = fromOffset(height);
81
84
  return height;
82
85
  }
83
86
  if (increaser.height) {
@@ -92,16 +95,16 @@ function ybox(generator) {
92
95
  var stop2 = lazy(function () {
93
96
  scrollY.smooth(stop);
94
97
  }, 40);
95
- var decrease = function () {
96
- var res = _decrease(increaser_t) + _decrease(increaser_b);
98
+ var decrease = function (t) {
99
+ var res = _decrease(increaser_t, t) + _decrease(increaser_b, t);
97
100
  if (!res) {
98
101
  scrollY.smooth(stop);
99
102
  }
100
103
  return true;
101
104
  };
102
105
  var increase = function (deltaY, minusOnly) {
103
- var t_height = increaser_t.height || 0;
104
- var b_height = increaser_b.height || 0;
106
+ var t_height = increaser_t.height;
107
+ var b_height = increaser_b.height;
105
108
  t_height -= deltaY;
106
109
  b_height += deltaY;
107
110
  if (!minusOnly && deltaY < 0 && t_height > 0) {
package/docs/main.js CHANGED
@@ -11,4 +11,7 @@ contextmenu(document, function (event) {
11
11
  }
12
12
  }
13
13
  ]);
14
+ })
15
+ on("beforeunload")(window, function () {
16
+ zimoli.clearHistory();
14
17
  })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.25.7",
4
- "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
3
+ "version": "3.25.11",
4
+ "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {
7
7
  "test": "test"