Advertisement
Guest User

Untitled

a guest
Oct 13th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. //Examples of reference range: 1) From 0 to 767 - "..767". 2) Range - "480..560". 3) From a certain value - "1024 .."
  2.  
  3. // ..768 ะดะพ
  4. // 768.. ะพั‚
  5.  
  6. jQuery(function() {
  7. initCarousel();
  8. });
  9.  
  10.  
  11. // scroll gallery init
  12. function initCarousel() {
  13. ResponsiveHelper.addRange({
  14. '768..': {
  15. on: function() {
  16. jQuery('.carousel').scrollGallery();
  17. },
  18. off: function() {
  19. jQuery('.carousel').scrollGallery('destroy');
  20. }
  21. }
  22. });
  23. }
  24.  
  25. /*
  26. * Responsive Layout helper
  27. */
  28. window.ResponsiveHelper = (function($){
  29. // init variables
  30. var handlers = [],
  31. prevWinWidth,
  32. win = $(window),
  33. nativeMatchMedia = false;
  34.  
  35. // detect match media support
  36. if(window.matchMedia) {
  37. if(window.Window && window.matchMedia === Window.prototype.matchMedia) {
  38. nativeMatchMedia = true;
  39. } else if(window.matchMedia.toString().indexOf('native') > -1) {
  40. nativeMatchMedia = true;
  41. }
  42. }
  43.  
  44. // prepare resize handler
  45. function resizeHandler() {
  46. var winWidth = win.width();
  47. if(winWidth !== prevWinWidth) {
  48. prevWinWidth = winWidth;
  49.  
  50. // loop through range groups
  51. $.each(handlers, function(index, rangeObject){
  52. // disable current active area if needed
  53. $.each(rangeObject.data, function(property, item) {
  54. if(item.currentActive && !matchRange(item.range[0], item.range[1])) {
  55. item.currentActive = false;
  56. if(typeof item.disableCallback === 'function') {
  57. item.disableCallback();
  58. }
  59. }
  60. });
  61.  
  62. // enable areas that match current width
  63. $.each(rangeObject.data, function(property, item) {
  64. if(!item.currentActive && matchRange(item.range[0], item.range[1])) {
  65. // make callback
  66. item.currentActive = true;
  67. if(typeof item.enableCallback === 'function') {
  68. item.enableCallback();
  69. }
  70. }
  71. });
  72. });
  73. }
  74. }
  75. win.bind('load resize orientationchange', resizeHandler);
  76.  
  77. // test range
  78. function matchRange(r1, r2) {
  79. var mediaQueryString = '';
  80. if(r1 > 0) {
  81. mediaQueryString += '(min-width: ' + r1 + 'px)';
  82. }
  83. if(r2 < Infinity) {
  84. mediaQueryString += (mediaQueryString ? ' and ' : '') + '(max-width: ' + r2 + 'px)';
  85. }
  86. return matchQuery(mediaQueryString, r1, r2);
  87. }
  88.  
  89. // media query function
  90. function matchQuery(query, r1, r2) {
  91. if(window.matchMedia && nativeMatchMedia) {
  92. return matchMedia(query).matches;
  93. } else if(window.styleMedia) {
  94. return styleMedia.matchMedium(query);
  95. } else if(window.media) {
  96. return media.matchMedium(query);
  97. } else {
  98. return prevWinWidth >= r1 && prevWinWidth <= r2;
  99. }
  100. }
  101.  
  102. // range parser
  103. function parseRange(rangeStr) {
  104. var rangeData = rangeStr.split('..');
  105. var x1 = parseInt(rangeData[0], 10) || -Infinity;
  106. var x2 = parseInt(rangeData[1], 10) || Infinity;
  107. return [x1, x2].sort(function(a, b){
  108. return a - b;
  109. });
  110. }
  111.  
  112. // export public functions
  113. return {
  114. addRange: function(ranges) {
  115. // parse data and add items to collection
  116. var result = {data:{}};
  117. $.each(ranges, function(property, data){
  118. result.data[property] = {
  119. range: parseRange(property),
  120. enableCallback: data.on,
  121. disableCallback: data.off
  122. };
  123. });
  124. handlers.push(result);
  125.  
  126. // call resizeHandler to recalculate all events
  127. prevWinWidth = null;
  128. resizeHandler();
  129. }
  130. };
  131. }(jQuery));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement