daily pastebin goal
31%
SHARE
TWEET

Untitled

a guest Oct 13th, 2017 53 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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));
RAW Paste Data
Top