Skip to content

Commit ec42784

Browse files
committed
grab the legend scrollbar at the cursor, not at its middle
1 parent f75f5ba commit ec42784

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

src/components/legend/draw.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -282,13 +282,19 @@ module.exports = function draw(gd) {
282282
scrollBar.on('.drag', null);
283283
scrollBox.on('.drag', null);
284284

285-
var drag = d3.behavior.drag().on('drag', function() {
286-
var e3 = d3.event;
287-
var e = e3.sourceEvent;
285+
var eventY0, scrollBarY0;
286+
287+
var drag = d3.behavior.drag()
288+
.on('dragstart', function() {
289+
eventY0 = d3.event.sourceEvent.clientY;
290+
scrollBarY0 = scrollBarY;
291+
})
292+
.on('drag', function() {
293+
var e = d3.event.sourceEvent;
288294
if(e.buttons === 2 || e.ctrlKey) return;
289295

290296
scrollBarY = Lib.constrain(
291-
e3.y - constants.scrollBarHeight / 2,
297+
e.clientY - eventY0 + scrollBarY0,
292298
constants.scrollBarMargin,
293299
constants.scrollBarMargin + scrollBarYMax);
294300
scrollBoxY = - (scrollBarY - constants.scrollBarMargin) /

test/jasmine/tests/legend_scroll_test.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,11 @@ describe('The legend', function() {
7979
it('should scroll when there\'s a wheel event', function() {
8080
var legend = getLegend();
8181
var scrollBox = getScrollBox();
82+
var scrollBar = getScrollBar();
8283
var legendHeight = getLegendHeight(gd);
8384
var scrollBoxYMax = gd._fullLayout.legend._height - legendHeight;
8485
var scrollBarYMax = legendHeight -
85-
constants.scrollBarHeight -
86+
scrollBar.getBoundingClientRect().height -
8687
2 * constants.scrollBarMargin;
8788
var initialDataScroll = scrollBox.getAttribute('data-scroll');
8889
var wheelDeltaY = 100;
@@ -100,19 +101,19 @@ describe('The legend', function() {
100101
function dragScroll(element, rightClick) {
101102
var scrollBox = getScrollBox();
102103
var scrollBar = getScrollBar();
104+
var scrollBarBB = scrollBar.getBoundingClientRect();
103105
var legendHeight = getLegendHeight(gd);
104106
var scrollBoxYMax = gd._fullLayout.legend._height - legendHeight;
105107
var scrollBarYMax = legendHeight -
106-
constants.scrollBarHeight -
108+
scrollBarBB.height -
107109
2 * constants.scrollBarMargin;
108110
var initialDataScroll = scrollBox.getAttribute('data-scroll');
109111
var dy = 50;
110112
var finalDataScroll = '' + Lib.constrain(initialDataScroll -
111113
dy / scrollBarYMax * scrollBoxYMax,
112114
-scrollBoxYMax, 0);
113115

114-
var scrollBarBB = scrollBar.getBoundingClientRect();
115-
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
116+
var y0 = scrollBarBB.top + scrollBarBB.height / 5;
116117
var y1 = y0 + dy;
117118

118119
var elBB = element.getBoundingClientRect();

0 commit comments

Comments
 (0)