| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- define(function(require, exports, module) {
- /*
- wrapped scroll controller
- */
- "use strict";
- var Util = require('../util'),
- Base = require('../base');
- var Controller = function(cfg) {
- Controller.superclass.constructor.call(this, cfg);
- this.userConfig = Util.mix({}, cfg);
- this.init();
- }
- Util.extend(Controller, Base, {
- init: function() {
- var self = this;
- self.xscroll = self.userConfig.xscroll;
- },
- add: function(scroll, cfg) {
- var self = this;
- cfg = Util.extend({
- captureBounce: false,
- stopPropagation: true
- }, cfg)
- if (!self.__scrolls) {
- self.__scrolls = {};
- }
- if (scroll.guid && !self.__scrolls[scroll.guid]) {
- scroll.parentscroll = self.xscroll;
- self._bind(scroll);
- return self.__scrolls[scroll.guid] = scroll;
- }
- return;
- },
- remove: function(scroll) {
- var self = this;
- if (!scroll || !scroll.guid) return;
- var subscroll = self.__scrolls[scroll.guid];
- if (subscroll) {
- subscroll.parentscroll = null;
- self._unbind(scroll);
- subscroll = null;
- }
- },
- get: function(guid) {
- if (guid) {
- return this.__scrolls[guid];
- }
- return this.__scrolls;
- },
- _unbind: function(sub) {
- },
- _bind: function(sub) {
- var self = this,
- xscroll = self.xscroll;
- xscroll.renderTo.addEventListener("touchstart", function() {
- xscroll._resetLockConfig();
- });
- sub.renderTo.addEventListener("touchstart", function() {
- sub._resetLockConfig();
- });
- xscroll.on("panend", xscroll._resetLockConfig);
- sub.on("panend", sub._resetLockConfig);
- sub.on("panstart", function(e) {
- //vertical scroll enabled
- if (!sub.userConfig.lockY && !xscroll.userConfig.lockY) {
- //outside of boundry
- if (sub.isBoundryOut()) {
- xscroll.userConfig.lockY = true;
- return;
- }
- if (e.direction == 16 && sub.getBoundryOutTop() >= 0) {
- sub.userConfig.lockY = true;
- } else if (e.direction == 8 && sub.getBoundryOutTop() >= 0 && sub.getBoundryOutBottom() < 0) {
- xscroll.userConfig.lockY = true;
- }
- if (e.direction == 8 && sub.getBoundryOutBottom() >= 0) {
- sub.userConfig.lockY = true;
- } else if (e.direction == 16 && sub.getBoundryOutBottom() >= 0 && sub.getBoundryOutTop() < 0) {
- xscroll.userConfig.lockY = true;
- }
- if (sub.getBoundryOutTop() < 0 && sub.getBoundryOutBottom() < 0) {
- xscroll.userConfig.lockY = true;
- }
- }
- //horizontal scroll enabled
- if (!sub.userConfig.lockX && !xscroll.userConfig.lockX) {
- if (sub.isBoundryOut()) {
- xscroll.userConfig.lockX = true;
- return;
- }
- if (e.direction == 4 && sub.getBoundryOutLeft() >= 0) {
- sub.userConfig.lockX = true;
- } else if (e.direction == 2 && sub.getBoundryOutLeft() >= 0 && sub.getBoundryOutRight() < 0) {
- xscroll.userConfig.lockX = true;
- }
- if (e.direction == 2 && sub.getBoundryOutRight() >= 0) {
- sub.userConfig.lockX = true;
- } else if (e.direction == 4 && sub.getBoundryOutRight() >= 0 && sub.getBoundryOutLeft() < 0) {
- xscroll.userConfig.lockX = true;
- }
- if (sub.getBoundryOutLeft() < 0 && sub.getBoundryOutRight() < 0) {
- xscroll.userConfig.lockX = true;
- }
- }
- if (!sub.userConfig.lockX && xscroll.userConfig.lockX) {
- //pan x
- if (e.direction == 2 || e.direction == 4) {
- xscroll.userConfig.lockY = true;
- } else {
- sub.userConfig.lockX = true;
- }
- }
- if (!sub.userConfig.lockY && xscroll.userConfig.lockY) {
- //pan y
- if (e.direction == 8 || e.direction == 16) {
- xscroll.userConfig.lockX = true;
- } else {
- sub.userConfig.lockY = true;
- }
- }
- });
- }
- });
- if (typeof module == 'object' && module.exports) {
- module.exports = Controller;
- }
- /** ignored by jsdoc **/
- else {
- return Controller;
- }
- });
|