Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Examples of reference range: 1) From 0 to 767 - "..767". 2) Range - "480..560". 3) From a certain value - "1024 .."
- // ..768 до
- // 768.. от
- jQuery(function() {
- initCarousel();
- });
- // scroll gallery init
- function initCarousel() {
- ResponsiveHelper.addRange({
- '768..': {
- on: function() {
- jQuery('.carousel').scrollGallery();
- },
- off: function() {
- jQuery('.carousel').scrollGallery('destroy');
- }
- }
- });
- }
- /*
- * Responsive Layout helper
- */
- window.ResponsiveHelper = (function($){
- // init variables
- var handlers = [],
- prevWinWidth,
- win = $(window),
- nativeMatchMedia = false;
- // detect match media support
- if(window.matchMedia) {
- if(window.Window && window.matchMedia === Window.prototype.matchMedia) {
- nativeMatchMedia = true;
- } else if(window.matchMedia.toString().indexOf('native') > -1) {
- nativeMatchMedia = true;
- }
- }
- // prepare resize handler
- function resizeHandler() {
- var winWidth = win.width();
- if(winWidth !== prevWinWidth) {
- prevWinWidth = winWidth;
- // loop through range groups
- $.each(handlers, function(index, rangeObject){
- // disable current active area if needed
- $.each(rangeObject.data, function(property, item) {
- if(item.currentActive && !matchRange(item.range[0], item.range[1])) {
- item.currentActive = false;
- if(typeof item.disableCallback === 'function') {
- item.disableCallback();
- }
- }
- });
- // enable areas that match current width
- $.each(rangeObject.data, function(property, item) {
- if(!item.currentActive && matchRange(item.range[0], item.range[1])) {
- // make callback
- item.currentActive = true;
- if(typeof item.enableCallback === 'function') {
- item.enableCallback();
- }
- }
- });
- });
- }
- }
- win.bind('load resize orientationchange', resizeHandler);
- // test range
- function matchRange(r1, r2) {
- var mediaQueryString = '';
- if(r1 > 0) {
- mediaQueryString += '(min-width: ' + r1 + 'px)';
- }
- if(r2 < Infinity) {
- mediaQueryString += (mediaQueryString ? ' and ' : '') + '(max-width: ' + r2 + 'px)';
- }
- return matchQuery(mediaQueryString, r1, r2);
- }
- // media query function
- function matchQuery(query, r1, r2) {
- if(window.matchMedia && nativeMatchMedia) {
- return matchMedia(query).matches;
- } else if(window.styleMedia) {
- return styleMedia.matchMedium(query);
- } else if(window.media) {
- return media.matchMedium(query);
- } else {
- return prevWinWidth >= r1 && prevWinWidth <= r2;
- }
- }
- // range parser
- function parseRange(rangeStr) {
- var rangeData = rangeStr.split('..');
- var x1 = parseInt(rangeData[0], 10) || -Infinity;
- var x2 = parseInt(rangeData[1], 10) || Infinity;
- return [x1, x2].sort(function(a, b){
- return a - b;
- });
- }
- // export public functions
- return {
- addRange: function(ranges) {
- // parse data and add items to collection
- var result = {data:{}};
- $.each(ranges, function(property, data){
- result.data[property] = {
- range: parseRange(property),
- enableCallback: data.on,
- disableCallback: data.off
- };
- });
- handlers.push(result);
- // call resizeHandler to recalculate all events
- prevWinWidth = null;
- resizeHandler();
- }
- };
- }(jQuery));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement