| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 'use strict';
- var d = require('../../lib/dom')
- , h = require('../../lib/helper')
- , instances = require('../instances')
- , updateGeometry = require('../update-geometry')
- , updateScroll = require('../update-scroll');
- function bindMouseScrollXHandler(element, i) {
- var currentLeft = null;
- var currentPageX = null;
- function updateScrollLeft(deltaX) {
- var newLeft = currentLeft + (deltaX * i.railXRatio);
- var maxLeft = Math.max(0, i.scrollbarXRail.getBoundingClientRect().left) + (i.railXRatio * (i.railXWidth - i.scrollbarXWidth));
- if (newLeft < 0) {
- i.scrollbarXLeft = 0;
- } else if (newLeft > maxLeft) {
- i.scrollbarXLeft = maxLeft;
- } else {
- i.scrollbarXLeft = newLeft;
- }
- var scrollLeft = h.toInt(i.scrollbarXLeft * (i.contentWidth - i.containerWidth) / (i.containerWidth - (i.railXRatio * i.scrollbarXWidth))) - i.negativeScrollAdjustment;
- updateScroll(element, 'left', scrollLeft);
- }
- var mouseMoveHandler = function (e) {
- updateScrollLeft(e.pageX - currentPageX);
- updateGeometry(element);
- e.stopPropagation();
- e.preventDefault();
- };
- var mouseUpHandler = function () {
- h.stopScrolling(element, 'x');
- i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
- };
- i.event.bind(i.scrollbarX, 'mousedown', function (e) {
- currentPageX = e.pageX;
- currentLeft = h.toInt(d.css(i.scrollbarX, 'left')) * i.railXRatio;
- h.startScrolling(element, 'x');
- i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
- i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);
- e.stopPropagation();
- e.preventDefault();
- });
- }
- function bindMouseScrollYHandler(element, i) {
- var currentTop = null;
- var currentPageY = null;
- function updateScrollTop(deltaY) {
- var newTop = currentTop + (deltaY * i.railYRatio);
- var maxTop = Math.max(0, i.scrollbarYRail.getBoundingClientRect().top) + (i.railYRatio * (i.railYHeight - i.scrollbarYHeight));
- if (newTop < 0) {
- i.scrollbarYTop = 0;
- } else if (newTop > maxTop) {
- i.scrollbarYTop = maxTop;
- } else {
- i.scrollbarYTop = newTop;
- }
- var scrollTop = h.toInt(i.scrollbarYTop * (i.contentHeight - i.containerHeight) / (i.containerHeight - (i.railYRatio * i.scrollbarYHeight)));
- updateScroll(element, 'top', scrollTop);
- }
- var mouseMoveHandler = function (e) {
- updateScrollTop(e.pageY - currentPageY);
- updateGeometry(element);
- e.stopPropagation();
- e.preventDefault();
- };
- var mouseUpHandler = function () {
- h.stopScrolling(element, 'y');
- i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
- };
- i.event.bind(i.scrollbarY, 'mousedown', function (e) {
- currentPageY = e.pageY;
- currentTop = h.toInt(d.css(i.scrollbarY, 'top')) * i.railYRatio;
- h.startScrolling(element, 'y');
- i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
- i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);
- e.stopPropagation();
- e.preventDefault();
- });
- }
- module.exports = function (element) {
- var i = instances.get(element);
- bindMouseScrollXHandler(element, i);
- bindMouseScrollYHandler(element, i);
- };
|