| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 'use strict';
- var instances = require('./instances');
- var upEvent = document.createEvent('Event')
- , downEvent = document.createEvent('Event')
- , leftEvent = document.createEvent('Event')
- , rightEvent = document.createEvent('Event')
- , yEvent = document.createEvent('Event')
- , xEvent = document.createEvent('Event')
- , xStartEvent = document.createEvent('Event')
- , xEndEvent = document.createEvent('Event')
- , yStartEvent = document.createEvent('Event')
- , yEndEvent = document.createEvent('Event')
- , lastTop
- , lastLeft;
- upEvent.initEvent('ps-scroll-up', true, true);
- downEvent.initEvent('ps-scroll-down', true, true);
- leftEvent.initEvent('ps-scroll-left', true, true);
- rightEvent.initEvent('ps-scroll-right', true, true);
- yEvent.initEvent('ps-scroll-y', true, true);
- xEvent.initEvent('ps-scroll-x', true, true);
- xStartEvent.initEvent('ps-x-reach-start', true, true);
- xEndEvent.initEvent('ps-x-reach-end', true, true);
- yStartEvent.initEvent('ps-y-reach-start', true, true);
- yEndEvent.initEvent('ps-y-reach-end', true, true);
- module.exports = function (element, axis, value) {
- if (typeof element === 'undefined') {
- throw 'You must provide an element to the update-scroll function';
- }
- if (typeof axis === 'undefined') {
- throw 'You must provide an axis to the update-scroll function';
- }
- if (typeof value === 'undefined') {
- throw 'You must provide a value to the update-scroll function';
- }
- if (axis === 'top' && value <= 0) {
- element.scrollTop = value = 0; // don't allow negative scroll
- element.dispatchEvent(yStartEvent);
- }
- if (axis === 'left' && value <= 0) {
- element.scrollLeft = value = 0; // don't allow negative scroll
- element.dispatchEvent(xStartEvent);
- }
- var i = instances.get(element);
- if (axis === 'top' && value >= i.contentHeight - i.containerHeight) {
- element.scrollTop = value = i.contentHeight - i.containerHeight; // don't allow scroll past container
- element.dispatchEvent(yEndEvent);
- }
- if (axis === 'left' && value >= i.contentWidth - i.containerWidth) {
- element.scrollLeft = value = i.contentWidth - i.containerWidth; // don't allow scroll past container
- element.dispatchEvent(xEndEvent);
- }
- if (!lastTop) {
- lastTop = element.scrollTop;
- }
- if (!lastLeft) {
- lastLeft = element.scrollLeft;
- }
- if (axis === 'top' && value < lastTop) {
- element.dispatchEvent(upEvent);
- }
- if (axis === 'top' && value > lastTop) {
- element.dispatchEvent(downEvent);
- }
- if (axis === 'left' && value < lastLeft) {
- element.dispatchEvent(leftEvent);
- }
- if (axis === 'left' && value > lastLeft) {
- element.dispatchEvent(rightEvent);
- }
- if (axis === 'top') {
- element.scrollTop = lastTop = value;
- element.dispatchEvent(yEvent);
- }
- if (axis === 'left') {
- element.scrollLeft = lastLeft = value;
- element.dispatchEvent(xEvent);
- }
- };
|