2015-11-23 4 views
10

मेरे पास एक उपयोगकर्ता अनुबंध स्क्रीन है। मूल रूप से एक आईफ़्रेम और एक बटन के साथ एक HTML दृश्य। जब उपयोगकर्ता नीचे स्क्रॉल करता है तो मैं बटन को सक्षम करना चाहता हूं। यह सभी डेस्कटॉप ब्राउज़र, आईई, क्रोम, सफारी के लिए काम करता है लेकिन आईओएस उपकरणों पर मोबाइल सफारी या क्रोम पर काम नहीं करता है। ऐसा लगता है कि 'स्क्रॉलिंग' घटना ठीक से संलग्न नहीं होती है। क्या आप यहां कुछ ऐसा देखते हैं जो वह काम करेगा?एंगुलरजेएस एक उपयोगकर्ता समझौते के दृश्य के लिए निर्देश, सक्षम बटन का पता लगाने, मोबाइल सफारी पर काम नहीं करता

(function() { 
    angular.module('myapp').directive('textAgreement', function($timeout, ActivityLogService) { 
    return { 
     restrict: 'A',   
     scope: { 
     onscrollCallback: '&onscrollCallback', 
     onloadCallback: '&onloadCallback' 
     }, 
     compile: function(tElement) {   
     return function(scope, element) { 
      /** Called on load **/ 
      var appliedCheck = function(event) { 
      try { 
       if (typeof scope.onloadCallback !== undefined) { 
       if (typeof scope.onloadCallback == 'function') {      
        scope.onloadCallback(); 
        scope.$apply(); 
       } 
       } 
       var elm = element[0].contentWindow.document.body; 
       var newwin = element[0].contentWindow;    
       if (elm) { 
       $(newwin).scroll(function() { 
        var checkBottom = (elm.scrollTop+600) >= elm.scrollHeight; 
        console.log('###$$$ +++++ ' + elm.scrollTop + ' ' + elm.scrollHeight);         
        if (checkBottom) {   
        scope.bottom = true; 
        if (typeof scope.onscrollCallback !== undefined) { 
         if (typeof scope.onscrollCallback == 'function') {      
         scope.onscrollCallback(); 
         scope.$apply(); 
         } 
        }     
        } 
       });     
       } 
      } catch(e) { 
       console.log(e);    
      } 
      }; 
      element.bind('load', appliedCheck);          
     }; 
     }  
    }; 
    }); 
})(); 

      <iframe text-agreement onload-callback="disableLoading()" onscroll-callback="enableAgree()" id="agreeFrame" src="{{ ::trustSrcAgreementUri }}" style="border:0" width="100%" height="100%"></iframe> 

उत्तर

9

स्क्रॉल ईवेंट डेस्कटॉप पर काम करते समय मोबाइल पर काम नहीं करते हैं। संक्षेप में, स्क्रॉल ईवेंट केवल स्क्रॉल के अंत में निकाल दिया जाता है। देखें:

http://andyshora.com/mobile-scroll-event-problems.html

+0

और वास्तव में इसे हल करने के लिए, आप इसे स्क्रॉल के बजाय "टचमोव" ईवेंट के साथ आज़मा सकते हैं। –

1

के रूप में मार्क ने कहा, पुस्तक इवेंट मोबाइल पर एक समस्या है - विशेष रूप से पुराने IOS उपकरणों में के रूप में वे स्क्रॉल दौरान जे एस निष्पादन रोक सकते हैं। यह आईओएस 8 में आंशिक रूप से तय किया गया है, आंशिक रूप से मेरा मतलब है कि समस्या सफारी में तय की गई है, लेकिन वेबव्यू में नहीं (न ही आईओएस पर चल रहे किसी भी अन्य ब्राउज़र में)।

एंड्रॉइड इसे एक दबाने वाली दर का आह्वान करता है, क्योंकि स्क्रॉल क्रोम में एसिंक है। डोम हेरफेर/रिपैंटिंग और भी अधिक है - लेकिन यह अभी भी आपके मामले के लिए सही तरीके से काम करेगा।

आपके द्वारा की जा रही समस्या को हल करने के लिए, आप टाइमर/अंतराल (< सफारी में या वेबव्यू/कॉर्डोवा < आईओएस 9 में आईओएस 8) के लिए अच्छी तरह से कर सकते हैं और scrollTop प्रॉपर्टी का निरीक्षण कर सकते हैं। या आपको अपना डिज़ाइन बदलना है, उदा। ताकि उपयोगकर्ता को 'बंद करें' बटन देखने के लिए नीचे से नीचे स्क्रॉल करना होगा।

संबंधित मुद्दे