summaryrefslogtreecommitdiff
path: root/public/js/syncscroll.js
diff options
context:
space:
mode:
authorCheng-Han, Wu2016-05-28 00:31:43 +0800
committerCheng-Han, Wu2016-05-28 00:31:43 +0800
commit5819e4007f12a982a6c46c2fb82625db7bf6fedf (patch)
treef381db51a111866afe2fbc87c9bd449f261f0a01 /public/js/syncscroll.js
parent5c861fd51e0c216df03161d7e7e170a793bf469d (diff)
Fix when scroll animate duration greater than debounce will cause scrolling flicking
Diffstat (limited to 'public/js/syncscroll.js')
-rw-r--r--public/js/syncscroll.js37
1 files changed, 19 insertions, 18 deletions
diff --git a/public/js/syncscroll.js b/public/js/syncscroll.js
index 53070fc4..c8b45e7f 100644
--- a/public/js/syncscroll.js
+++ b/public/js/syncscroll.js
@@ -115,10 +115,7 @@ var viewScrollThrottle = 10;
var buildMapThrottle = 100;
var viewScrolling = false;
-var viewScrollingDebounce = 200;
-
var editScrolling = false;
-var editScrollingDebounce = 200;
ui.area.codemirrorScroll.on('scroll', _.throttle(syncScrollToView, editScrollThrottle));
ui.area.view.on('scroll', _.throttle(syncScrollToEdit, viewScrollThrottle));
@@ -214,12 +211,8 @@ function buildMapInner(callback) {
if (loaded && callback) callback();
}
-// sync view scroll progress to edit
-var viewScrollingTimeout = _.debounce(viewScrollingTimeoutInner, viewScrollingDebounce);
-
-function viewScrollingTimeoutInner() {
- viewScrolling = false;
-}
+// sync view scroll progress to edit
+var viewScrollingTimer = null;
function syncScrollToEdit(e) {
if (currentMode != modeType.both || !syncscroll) return;
@@ -280,21 +273,23 @@ function syncScrollToEdit(e) {
var posDiff = Math.abs(scrollInfo.top - posTo);
var duration = posDiff / 50;
+ duration = duration >= 100 ? duration : 100;
ui.area.codemirrorScroll.stop(true, true).animate({
scrollTop: posTo
- }, duration >= 100 ? duration : 100, "linear");
+ }, duration, "linear");
viewScrolling = true;
- viewScrollingTimeout();
+ clearTimeout(viewScrollingTimer);
+ viewScrollingTimer = setTimeout(viewScrollingTimeoutInner, duration * 1.2);
}
-// sync edit scroll progress to view
-var editScrollingTimeout = _.debounce(editScrollingTimeoutInner, editScrollingDebounce);
-
-function editScrollingTimeoutInner() {
- editScrolling = false;
+function viewScrollingTimeoutInner() {
+ viewScrolling = false;
}
+// sync edit scroll progress to view
+var editScrollingTimer = null;
+
function syncScrollToView(event, _lineNo) {
if (currentMode != modeType.both || !syncscroll) return;
if (preventSyncScrollToView) {
@@ -336,10 +331,16 @@ function syncScrollToView(event, _lineNo) {
var posDiff = Math.abs(ui.area.view.scrollTop() - posTo);
var duration = posDiff / 50;
+ duration = duration >= 100 ? duration : 100;
ui.area.view.stop(true, true).animate({
scrollTop: posTo
- }, duration >= 100 ? duration : 100, "linear");
+ }, duration, "linear");
editScrolling = true;
- editScrollingTimeout();
+ clearTimeout(editScrollingTimer);
+ editScrollingTimer = setTimeout(editScrollingTimeoutInner, duration * 1.2);
+}
+
+function editScrollingTimeoutInner() {
+ editScrolling = false;
} \ No newline at end of file