Skip to content

Commit fc0e256

Browse files
committed
Directive repeat-click: fix touchpad click once but change value twice bug. Keep the click behavior consistent with other UI frameworks.
1 parent 04b5f0d commit fc0e256

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/directives/repeat-click.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,33 @@ import { once, on } from 'element-ui/src/utils/dom';
22

33
export default {
44
bind(el, binding, vnode) {
5-
let interval = null;
6-
let startTime;
5+
const DELAY = 300;
6+
const INTERVAL = 100;
7+
let intervalTimer = null;
8+
let delayTimer = null;
79
const handler = () => vnode.context[binding.expression].apply();
810
const clear = () => {
9-
if (Date.now() - startTime < 100) {
10-
handler();
11-
}
12-
clearInterval(interval);
13-
interval = null;
11+
clearInterval(intervalTimer);
12+
clearTimeout(delayTimer);
13+
intervalTimer = null;
14+
delayTimer = null;
1415
};
1516

1617
on(el, 'mousedown', (e) => {
1718
if (e.button !== 0) return;
18-
startTime = Date.now();
19+
20+
handler();
1921
once(document, 'mouseup', clear);
20-
clearInterval(interval);
21-
interval = setInterval(handler, 100);
22+
clearInterval(intervalTimer);
23+
24+
if (delayTimer) {
25+
clearTimeout(delayTimer);
26+
}
27+
28+
delayTimer = setTimeout(() => {
29+
intervalTimer = setInterval(handler, INTERVAL);
30+
delayTimer = null;
31+
}, DELAY);
2232
});
2333
}
2434
};

0 commit comments

Comments
 (0)