fastscroll.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. define(function(require, exports, module) {
  2. "use strict";
  3. var Util = require('../util'),
  4. Base = require('../base');
  5. var FastScroll = function(cfg) {
  6. FastScroll.superclass.constructor.call(this, cfg);
  7. this.userConfig = Util.mix({
  8. }, cfg);
  9. }
  10. Util.extend(FastScroll, Base, {
  11. pluginId: "fastscroll",
  12. pluginInitializer: function(xscroll) {
  13. var self = this;
  14. self.xscroll = xscroll;
  15. self._bindEvt();
  16. },
  17. pluginDestructor: function() {
  18. },
  19. _bindEvt: function() {
  20. var self = this,
  21. xscroll = self.xscroll,
  22. mc = xscroll.mc;
  23. var speedRecords = [];
  24. var defaultMaxSpeed = xscroll.userConfig.maxSpeed || 2;
  25. var average = function(ary) {
  26. var l = ary.length;
  27. if (l == 0) return;
  28. var t = 0;
  29. for (var i = 0; i < l; i++) {
  30. t += ary[i];
  31. }
  32. return t / l;
  33. }
  34. mc.on("panend", function(e) {
  35. if (Math.abs(e.velocityY) > 1.5 && (speedRecords.length == 0 || e.velocityY / speedRecords[speedRecords.length - 1] > 0)) {
  36. speedRecords.push(e.velocityY * Math.pow(1.2, speedRecords.length));
  37. } else {
  38. speedRecords = [];
  39. xscroll.userConfig.maxSpeed = defaultMaxSpeed;
  40. }
  41. if (speedRecords.length > 3) {
  42. var v = average(speedRecords);
  43. //cancel limit speed
  44. xscroll.userConfig.maxSpeed = Math.abs(v);
  45. xscroll._onpanend({
  46. velocityY: v
  47. });
  48. }
  49. });
  50. }
  51. });
  52. if (typeof module == 'object' && module.exports) {
  53. module.exports = FastScroll;
  54. }
  55. /** ignored by jsdoc **/
  56. else if (window.XScroll && window.XScroll.Plugins) {
  57. return XScroll.Plugins.FastScroll = FastScroll;
  58. }
  59. });