Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. document.getElementsByClassName('zoomer-start')[0].addEventListener('click', init);
  2.  
  3. document.getElementsByClassName('zoomer-reset')[0].addEventListener('click', reset);
  4.  
  5. function init() {
  6. var images = document.querySelectorAll('.zoomer-img');
  7.  
  8. for (var i = 0; i < images.length; i++) {
  9. (function() {
  10. var image = images[i];
  11.  
  12. var zoomer = new Hammer(image);
  13.  
  14. zoomer.get('pinch').set({enable: false});
  15. zoomer.get('pan').set({enable: false});
  16.  
  17. var clicked = false;
  18.  
  19. var adjustScale = 1;
  20. var adjustDeltaX = 0;
  21. var adjustDeltaY = 0;
  22.  
  23. var currentScale = null;
  24. var currentDeltaX = null;
  25. var currentDeltaY = null;
  26.  
  27. zoomer.on('tap', function (e) {
  28. if (!clicked) {
  29. zoomer.get('pinch').set({enable: true});
  30. zoomer.get('pan').set({enable: true, direction: Hammer.DIRECTION_ALL});
  31. clicked = true;
  32. } else {
  33. zoomer.get('pinch').set({enable: false});
  34. zoomer.get('pan').set({enable: false});
  35. clicked = false;
  36. }
  37.  
  38. if (currentScale > 1) {
  39. adjustScale = 1;
  40. adjustDeltaX = 0;
  41. adjustDeltaY = 0;
  42. } else {
  43. adjustScale = 2;
  44. }
  45.  
  46. currentScale = adjustScale * e.scale;
  47. currentDeltaX = adjustDeltaX + (e.deltaX / currentScale);
  48. currentDeltaY = adjustDeltaY + (e.deltaY / currentScale);
  49.  
  50. image.style.transform = 'scale(' + currentScale + ') translate3d(' + currentDeltaX + 'px, ' + currentDeltaY + 'px, 0)';
  51. });
  52.  
  53. zoomer.on('pan pinch', function (e) {
  54. currentScale = Math.max(1, Math.min(adjustScale * e.scale, 4));
  55. currentDeltaX = adjustDeltaX + (e.deltaX / currentScale);
  56. currentDeltaY = adjustDeltaY + (e.deltaY / currentScale);
  57.  
  58. var scaledX = ((((image.width * currentScale) / 2) - (image.width / 2)) / currentScale);
  59. if (currentDeltaX > scaledX)
  60. currentDeltaX = scaledX;
  61. if (currentDeltaX < -scaledX)
  62. currentDeltaX = -scaledX;
  63.  
  64. var scaledY = ((((image.height * currentScale) / 2) - (image.height / 2)) / currentScale);
  65. if (currentDeltaY > scaledY)
  66. currentDeltaY = scaledY;
  67. if (currentDeltaY < -scaledY)
  68. currentDeltaY = -scaledY;
  69.  
  70. image.style.transform = 'scale(' + currentScale + ') translate3d(' + currentDeltaX + 'px, ' + currentDeltaY + 'px, 0)';
  71. });
  72.  
  73. zoomer.on('panend pinchend', function () {
  74. adjustScale = currentScale;
  75. adjustDeltaX = currentDeltaX;
  76. adjustDeltaY = currentDeltaY;
  77. });
  78.  
  79. function reset() {
  80. zoomer.get('pinch').set({enable: false});
  81. zoomer.get('pan').set({enable: false});
  82.  
  83. clicked = false;
  84.  
  85. adjustScale = 1;
  86. adjustDeltaX = 0;
  87. adjustDeltaY = 0;
  88.  
  89. currentScale = null;
  90. currentDeltaX = null;
  91. currentDeltaY = null;
  92.  
  93. image.style.transform = 'scale(' + 1 + ') translate3d(' + 0 + 'px, ' + 0 + 'px, 0)';
  94. }
  95. })();
  96. }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement