2013-10-10 4 views
3

Хорошо, поэтому я пытаюсь перенести сайт parallax в Wordpress, и он до сих пор не дал мне ничего, кроме головных болей. Теперь я, наконец, все это работаю над настольными браузерами, но в мобильных браузерах он создает всевозможные проблемы. Если кто-то может сказать мне, как отключить эту часть моего скрипта (который использует Stellar и iScroll) от отображения в мобильных браузерах, или еще лучше, возможно, вы видите, почему у меня так много проблем. В любом случае я был бы чрезвычайно благодарен за какой-либо совет, поскольку jQuery/Javascript довольно чуждо мне. ТИА!Как отключить эту часть моего javascript на мобильных устройствах?

//*************************************************************************** STELLER JS SCROLL 
var STELLARJS = { 
    init: function() { 
     var self = this; 
     jQuery(function(){ 
      //self.$sections = $('div.section').each(function(index){ 
       //$(this).data('sectionIndex', index); 
      //}); 

      //self.handleEvents(); 

      //self.debugOffsets.init(); 
      //self.debugOffsetParents.init(); 

      self.initParallax(); 
     }); 
    }, 

    initParallax: function() { 
     var isHomePage = jQuery('body').hasClass('home'), 
      $main = jQuery('div.main'); 

     if (isHomePage) { 
      //$main.width($main.width() + $(window).width() - 1000); 
     } 

     //if ($.browser.msie) { 
     // $('body').removeAttr('data-stellar-background-ratio').append('<div class="ie-bg" />'); 
     //} 


     if (isMobileWebkit) { 

      iScrollInstance = new iScroll('scroller'); 

       jQuery('#wrapper').stellar({ 
       parallaxBackgrounds:false, 
       scrollProperty: 'transform', 
       positionProperty: 'customPositionTransform', 
       hideDistantElements: false, 
       horizontalScrolling: false, 
       verticalOffset: verticalOffset 
       }); 

       console.log('isMobileWebkit'+iScrollInstance); 
     } else { 
      console.log('is not MobileWebkit'); 
      jQuery(window).stellar({ 
       /* 
        scrollProperty: 'scroll', 
        positionProperty: 'position', 
        horizontalScrolling: true, 
        verticalScrolling: true, 
        horizontalOffset: 0, 
        verticalOffset: 0, 
        responsive: false, 
        parallaxBackgrounds: true, 
        parallaxElements: true, 
        hideDistantElements: true, 
        hideElement: function($elem) { $elem.hide(); }, 
        showElement: function($elem) { $elem.show(); } 
       */ 
       positionProperty: 'customPositionTransform', 
       horizontalScrolling: false, 
       verticalOffset: verticalOffset, 
       horizontalOffset: 0, 
       verticalScrolling: true, 
       hideDistantElements: false, 

      }); 
     } 


    }, 

    handleEvents: function() { 
     var self = this, 
      //Debounce function from Underscore.js 
      debounce = function(func, wait) { 
       console.log('debounce'); 
       var timeout; 
       return function() { 
        var context = this, args = arguments; 
        var later = function() { 
         timeout = null; 
         func.apply(context, args); 
        }; 
        clearTimeout(timeout); 
        timeout = setTimeout(later, wait); 
       } 
      }, 
      handleScroll = function() { 
       console.log('handleScroll'); 
       var scrollLeft = $(window).scrollLeft(), 
        sectionIndex = Math.round((scrollLeft - 40)/self.$sections.first().outerWidth()), 
        $activeSection = self.$sections.eq(sectionIndex); 

       if ($activeSection.length === 0) { 
        $activeSection = self.$sections.last(); 
       } 

       if ($activeSection.length === 0) return; 

       jQuery(window).unbind('scroll.stellarsite'); 

       if (scrollLeft === 0) { 
        jQuery(window).unbind('scroll.stellarsite').bind('scroll.stellarsite', debounce(handleScroll, 500)); 
       } else { 
        jQuery('html,body').animate({ 
         scrollLeft: $activeSection.offset().left - 40 
        }, 600, 'easeInOutExpo', function() { 
         setTimeout(function(){ 
          jQuery(window).unbind('scroll.stellarsite').bind('scroll.stellarsite', debounce(handleScroll, 500)); 
         }, 10); 
        }); 
       } 

       jQuery(window).bind('mousewheel', function(){ 
        jQuery('html,body').stop(true, true); 
       }); 

       jQuery(document).bind('keydown', function(e){ 
        var key = e.which; 

        if (key === 37 || key === 39) { 
         $('html,body').stop(true, true); 
        } 
       }); 
      }; 

     if (window.location.href.indexOf('#show-offset-parents-default') === -1) { 
      jQuery(window).bind('scroll.stellarsite', debounce(handleScroll, 500)); 
     } 
    }, 
    debugOffsets: { 
     init: function() { 
      this.$debug = jQuery('#debugOffsets'); 

      //if (window.location.href.indexOf('#show-offsets') > -1) { 
       this.show(); 
      //} 
     }, 
     show: function() { 
      this.$debug.fadeIn(); 
      jQuery('body').addClass('debugOffsets'); 
      jQuery('h2').append('<div class="debug-h2-label">Offset Parent (All parallax elements align when this meets the offsets)</div>'); 
     }, 
     hide: function() { 
      this.debug.fadeOut; 
      jQuery('body').removeClass('debugOffsets'); 
     } 
    }, 
    debugOffsetParents: { 
     init: function() { 
      this.$debug = jQuery('#debugOffsets'); 
      this.$debug.fadeIn(); 
      console.log('show'); 
      jQuery('body').addClass('debugOffsetParents'); 
      jQuery('h2').append('<div class="debug-h2-label">New Offset Parent (All parallax elements align when this meets the offsets)</div>'); 
      jQuery('h2').each(function(){ 
       jQuery(this).find('div.constellation:last').append('<div class="debug-constellation-label">Default Offset Parents</div>'); 
      }); 
      jQuery('body').addClass('debug'); 
     } 
    } 
}; 
+0

код кажется излишне сложным, stellar.js очень прост в использовании и инициализации. просто проверяйте мобильные устройства (обнюхивание пользовательского агента или ширину экрана или и то, и другое) и не запускайте '.stellar()' ни на что, если ваши условия для мобильных устройств будут удовлетворены. – Ennui

+0

Я полностью согласен. К сожалению, я не был тем, кто закодировал этот сайт, мне только что было поручено преобразовать его в тему Wordpress. – APAD1

+0

использовать Modernizr для обнаружения мобильного телефона – LorDex

ответ

0

я нашел этот код здесь, что определяет, если это мобильный в JavaScript

window.mobilecheck = function() { 
var check = false; 
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|)|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera); 
return check; } 

так что вы можете использовать эту функцию, чтобы обнаружить мобильный, если это добавить код в (isMobileWebkit) который я думаю отключить эффект параллакса, так что код может выглядеть следующим образом

if(window.mobilecheck()) 
{ 
      iScrollInstance = new iScroll('scroller'); 

       jQuery('#wrapper').stellar({ 
       parallaxBackgrounds:false, 
       scrollProperty: 'transform', 
       positionProperty: 'customPositionTransform', 
       hideDistantElements: false, 
       horizontalScrolling: false, 
       verticalOffset: verticalOffset 
       }); 
} 

это не испытанным я надеюсь, что он работает

0

Проверка по UA - не самая лучшая идея, так как есть новые мобильные устройства/Kindles/Blackberries/Firefox-os-phones/Ubuntu-телефоны и т. Д., Которые создаются каждый раз через некоторое время. Любой список пользовательских абитуриентов будет устаревать довольно скоро.

Если вы хотите, чтобы отключить некоторые эффекты на сенсорных устройствах, это может быть то, что вы хотите: How to check browser for touchstart support using JS/jQuery?

В принципе вы можете использовать

if (document.createTouch) { 
    //mobile code 
} else { 
    //desktop, non-touch code 
} 
0
function isMobile() { 
    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 
} 

if (!isMobile()) { 
//if its not mobile then start script otherwise turn it off (just place the script under this comment 
} 
Смежные вопросы