Guest User

Untitled

a guest
Jan 23rd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.39 KB | None | 0 0
  1. (function() {
  2.  
  3. app.ui.createImageScroller = function(params) {
  4. var yCenter = 160;
  5. var xCenter = 160;
  6. var scrollCenter = {x:xCenter,y:yCenter};
  7. var scrollDuration = 100;
  8. var centerThreshold = 20;
  9.  
  10. var imageScroller = Ti.UI.createView({
  11. height:params.height,
  12. width:960,
  13. backgroundColor:params.backgroundColor,
  14. center:{x:xCenter,y:yCenter}
  15. });
  16.  
  17. var index = 0;
  18. var imageViews = [];
  19. var images = [];
  20. for (var i = 0; i < 3; i++) {
  21. var imageView = Ti.UI.createImageView({
  22. defaultImage:params.loadingImage,
  23. height:params.height,
  24. width:320,
  25. left:(i * 320)
  26. });
  27. imageViews.push(imageView);
  28. imageScroller.add(imageView);
  29. }
  30.  
  31. var dif = 0;
  32. imageScroller.addEventListener('touchstart', function(e) {
  33. dif = e.globalPoint.x - imageScroller.center.x;
  34. });
  35.  
  36. imageScroller.addEventListener('touchmove', function(e) {
  37. imageScroller.setCenter({x:e.globalPoint.x - dif,y:yCenter});
  38. });
  39.  
  40. imageScroller.addEventListener('touchend', function(e) {
  41. if (imageScroller.center.x < (xCenter - centerThreshold) && canNext()) {
  42. imageScroller.next();
  43. } else if (imageScroller.center.x > (xCenter + centerThreshold) && canPrevious()) {
  44. imageScroller.previous();
  45. } else {
  46. imageScroller.animate({center:scrollCenter,duration:scrollDuration});
  47. }
  48. });
  49.  
  50. imageScroller.goto = function(imageIndex) {
  51. if (imageIndex < images.length) {
  52. index = imageIndex;
  53. updateImages();
  54. fireScrollEvent();
  55. }
  56. }
  57.  
  58. function updateImages() {
  59. updateCurrent();
  60. updateNext();
  61. updatePrevious();
  62. }
  63.  
  64. function canNext() {
  65. return (index + 1) < images.length;
  66. }
  67.  
  68. function canPrevious() {
  69. return index - 1 >= 0;
  70. }
  71.  
  72. function updateCurrent() {
  73. imageViews[1].image = images[index].url;
  74. images[index].hasViewed = true;
  75. }
  76.  
  77. function updateNext() {
  78. imageViews[2].image = canNext() ? (images[index + 1].hasViewed ? images[index + 1].url : params.loadingImage) : null;
  79. }
  80.  
  81. function updatePrevious() {
  82. imageViews[0].image = canPrevious() ? (images[index - 1].hasViewed ? images[index - 1].url : params.loadingImage) : null;
  83. }
  84.  
  85. function fireScrollEvent() {
  86. imageScroller.fireEvent('scroll', {index:index});
  87. }
  88.  
  89. imageScroller.next = function() {
  90. if (canNext()) {
  91. imageScroller.animate({center:{x:-160,y:yCenter},duration:scrollDuration}, function() {
  92. imageViews[2].left = 320;
  93. imageScroller.center = scrollCenter;
  94. imageViews[1].left = 0;
  95. imageViews[0].left = 640;
  96. imageViews = [imageViews[1],imageViews[2],imageViews[0]];
  97. imageScroller.goto(index + 1);
  98. });
  99. }
  100. }
  101.  
  102. imageScroller.previous = function() {
  103. if (canPrevious()) {
  104. imageScroller.animate({center:{x:480,y:yCenter},duration:scrollDuration}, function() {
  105. imageViews[0].left = 320;
  106. imageScroller.center = scrollCenter;
  107. imageViews[1].left = 640;
  108. imageViews[2].left = 0;
  109. imageViews = [imageViews[2],imageViews[0],imageViews[1]];
  110. imageScroller.goto(index - 1);
  111. });
  112. }
  113. }
  114.  
  115. imageScroller.appendUrls = function(urls) {
  116. for (var i = 0,count = urls.length; i < count; i++) {
  117. images.push({url:urls[i],hasViewed:false});
  118. }
  119. };
  120.  
  121. imageScroller.updateUrls = function(urls) {
  122. images = [];
  123. imageScroller.appendUrls(urls);
  124. updateImages();
  125. };
  126.  
  127. imageScroller.count = function() {
  128. return images.length;
  129. }
  130.  
  131. return imageScroller;
  132. }
  133.  
  134. })();
Add Comment
Please, Sign In to add comment