mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-21 09:48:00 +01:00
Fix smooth scroll issue.
This commit is contained in:
@@ -1345,31 +1345,30 @@ var Buffer = Module("buffer", {
|
|||||||
* Like scrollTo, but scrolls more smoothly and does not update
|
* Like scrollTo, but scrolls more smoothly and does not update
|
||||||
* marks.
|
* marks.
|
||||||
*/
|
*/
|
||||||
smoothScrollTo: function smoothScrollTo(elem, x, y) {
|
smoothScrollTo: function smoothScrollTo(node, x, y) {
|
||||||
let time = options["scrolltime"];
|
let time = options["scrolltime"];
|
||||||
let steps = options["scrollsteps"];
|
let steps = options["scrollsteps"];
|
||||||
|
|
||||||
let data = elem;
|
let elem = Buffer.Scrollable(node);
|
||||||
elem = Buffer.Scrollable(elem);
|
|
||||||
|
|
||||||
if (data.dactylScrollTimer)
|
if (node.dactylScrollTimer)
|
||||||
data.dactylScrollTimer.cancel();
|
node.dactylScrollTimer.cancel();
|
||||||
|
|
||||||
x = data.dactylScrollDestX = Math.min(x, elem.scrollWidth - elem.clientWidth);
|
x = node.dactylScrollDestX = Math.min(x, elem.scrollWidth - elem.clientWidth);
|
||||||
y = data.dactylScrollDestY = Math.min(y, elem.scrollHeight - elem.clientHeight);
|
y = node.dactylScrollDestY = Math.min(y, elem.scrollHeight - elem.clientHeight);
|
||||||
let [startX, startY] = [elem.scrollLeft, elem.scrollTop];
|
let [startX, startY] = [elem.scrollLeft, elem.scrollTop];
|
||||||
let n = 0;
|
let n = 0;
|
||||||
(function next() {
|
(function next() {
|
||||||
if (n++ === steps) {
|
if (n++ === steps) {
|
||||||
elem.scrollLeft = x;
|
elem.scrollLeft = x;
|
||||||
elem.scrollTop = y;
|
elem.scrollTop = y;
|
||||||
delete data.dactylScrollDestX;
|
delete node.dactylScrollDestX;
|
||||||
delete data.dactylScrollDestY;
|
delete node.dactylScrollDestY;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
elem.scrollLeft = startX + (x - startX) / steps * n;
|
elem.scrollLeft = startX + (x - startX) / steps * n;
|
||||||
elem.scrollTop = startY + (y - startY) / steps * n;
|
elem.scrollTop = startY + (y - startY) / steps * n;
|
||||||
data.dactylScrollTimer = util.timeout(next, time / steps);
|
node.dactylScrollTimer = util.timeout(next, time / steps);
|
||||||
}
|
}
|
||||||
}).call(this);
|
}).call(this);
|
||||||
},
|
},
|
||||||
@@ -1386,11 +1385,10 @@ var Buffer = Module("buffer", {
|
|||||||
* @throws {FailedAssertion} if scrolling is not possible in the
|
* @throws {FailedAssertion} if scrolling is not possible in the
|
||||||
* given direction.
|
* given direction.
|
||||||
*/
|
*/
|
||||||
scrollHorizontal: function scrollHorizontal(elem, unit, number) {
|
scrollHorizontal: function scrollHorizontal(node, unit, number) {
|
||||||
let fontSize = parseInt(DOM(elem).style.fontSize);
|
let fontSize = parseInt(DOM(node).style.fontSize);
|
||||||
|
|
||||||
let data = elem;
|
let elem = Buffer.Scrollable(node);
|
||||||
elem = Buffer.Scrollable(elem);
|
|
||||||
let increment;
|
let increment;
|
||||||
if (unit == "columns")
|
if (unit == "columns")
|
||||||
increment = fontSize; // Good enough, I suppose.
|
increment = fontSize; // Good enough, I suppose.
|
||||||
@@ -1401,10 +1399,10 @@ var Buffer = Module("buffer", {
|
|||||||
|
|
||||||
dactyl.assert(number < 0 ? elem.scrollLeft > 0 : elem.scrollLeft < elem.scrollWidth - elem.clientWidth);
|
dactyl.assert(number < 0 ? elem.scrollLeft > 0 : elem.scrollLeft < elem.scrollWidth - elem.clientWidth);
|
||||||
|
|
||||||
let left = data.dactylScrollDestX !== undefined ? data.dactylScrollDestX : elem.scrollLeft;
|
let left = node.dactylScrollDestX !== undefined ? node.dactylScrollDestX : elem.scrollLeft;
|
||||||
data.dactylScrollDestX = undefined;
|
node.dactylScrollDestX = undefined;
|
||||||
|
|
||||||
Buffer.scrollTo(elem, left + number * increment, null, "h-" + unit);
|
Buffer.scrollTo(node, left + number * increment, null, "h-" + unit);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1419,11 +1417,10 @@ var Buffer = Module("buffer", {
|
|||||||
* @throws {FailedAssertion} if scrolling is not possible in the
|
* @throws {FailedAssertion} if scrolling is not possible in the
|
||||||
* given direction.
|
* given direction.
|
||||||
*/
|
*/
|
||||||
scrollVertical: function scrollVertical(elem, unit, number) {
|
scrollVertical: function scrollVertical(node, unit, number) {
|
||||||
let fontSize = parseInt(DOM(elem).style.lineHeight);
|
let fontSize = parseInt(DOM(node).style.lineHeight);
|
||||||
|
|
||||||
let data = elem;
|
let elem = Buffer.Scrollable(node);
|
||||||
elem = Buffer.Scrollable(elem);
|
|
||||||
let increment;
|
let increment;
|
||||||
if (unit == "lines")
|
if (unit == "lines")
|
||||||
increment = fontSize;
|
increment = fontSize;
|
||||||
@@ -1434,10 +1431,10 @@ var Buffer = Module("buffer", {
|
|||||||
|
|
||||||
dactyl.assert(number < 0 ? elem.scrollTop > 0 : elem.scrollTop < elem.scrollHeight - elem.clientHeight);
|
dactyl.assert(number < 0 ? elem.scrollTop > 0 : elem.scrollTop < elem.scrollHeight - elem.clientHeight);
|
||||||
|
|
||||||
let top = data.dactylScrollDestY !== undefined ? data.dactylScrollDestY : elem.scrollTop;
|
let top = node.dactylScrollDestY !== undefined ? node.dactylScrollDestY : elem.scrollTop;
|
||||||
data.dactylScrollDestY = undefined;
|
node.dactylScrollDestY = undefined;
|
||||||
|
|
||||||
Buffer.scrollTo(elem, null, top + number * increment, "v-" + unit);
|
Buffer.scrollTo(node, null, top + number * increment, "v-" + unit);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1452,9 +1449,9 @@ var Buffer = Module("buffer", {
|
|||||||
* of the current viewport height to scroll to. If null, do not
|
* of the current viewport height to scroll to. If null, do not
|
||||||
* scroll vertically.
|
* scroll vertically.
|
||||||
*/
|
*/
|
||||||
scrollToPercent: function scrollToPercent(elem, horizontal, vertical) {
|
scrollToPercent: function scrollToPercent(node, horizontal, vertical) {
|
||||||
elem = Buffer.Scrollable(elem);
|
let elem = Buffer.Scrollable(node);
|
||||||
Buffer.scrollTo(elem,
|
Buffer.scrollTo(node,
|
||||||
horizontal == null ? null
|
horizontal == null ? null
|
||||||
: (elem.scrollWidth - elem.clientWidth) * (horizontal / 100),
|
: (elem.scrollWidth - elem.clientWidth) * (horizontal / 100),
|
||||||
vertical == null ? null
|
vertical == null ? null
|
||||||
|
|||||||
Reference in New Issue
Block a user