2011-07-14 9 views
6

स्क्रॉल कर रहे थे, तो स्क्रॉलव्यू में एक सूचीदृश्य में क्लिक करें। मेरे पास एक सरल खोज पृष्ठ वाला एक JQM ऐप है जो परिणामों को सूचीदृश्य के रूप में दिखाता है। मैंने स्क्रॉलव्यू में अपनी सूचीदृश्य लपेट लिया है। यह बहुत अच्छी तरह से काम करता है लेकिन जब आप स्क्रॉल कर रहे हैं तो लगभग आधा समय चुना जाता है जो भी आप सूचीबद्ध हैं। मैं उस व्यवहार को दबाना चाहता हूं।दबाएं यदि आप

मैं जिस व्यवहार को देखना चाहता हूं वह यह है कि यदि आप स्क्रॉल कर रहे हैं और आप अपनी उंगली उठाते हैं, तो बस स्क्रॉल करना बंद करें। यदि आप स्क्रॉल नहीं कर रहे हैं और आप टैप करें (क्लिक करें) तो आप चुन रहे हैं।

<div id="vehicleScroller" data-scroll="y" style="height:444px"> 
    <p> 
    <ul id="vehicleSearchResults" data-role="listview"> 
    <li> 
     <a href="#PartyDetailsPage" data-id='${Number}' 
      onclick='return $.vehicle.PartyItemClick();'> 
      ${Name}&nbsp; 
     </a> 
     </li> 
     [... more li's...] 
    </ul> 

    </div> 

मैं jquery.mobile.scrollview और घटनाओं है कि आग देखने के लिए कुछ निदान लॉगिंग जोड़ दिया है। मैं उम्मीद कर रहा था कि स्क्रॉल करते समय मैं क्लिक को रोक सकता हूं लेकिन _handleDragStop हमेशा PartyItemClick() से पहले आग लगती है।

मैंने देरी को बदलने के साथ भी खेला है क्लिक करें क्लिक करें और बंद करें लेकिन यह लिंक क्लिक व्यवहार को प्रभावित नहीं कर रहा है।

मैं के बारे में _handleDragStop घटना है कि मैं देखने के लिए अगर मैं सिर्फ स्क्रॉल किया गया है जांच कर सकता है के लिए कुछ अतिरिक्त समय कोड जोड़ने के लिए तैयार हूँ और कुछ सवाल पूछने के लिए चाहता था:

1) से पहले मैं जाना जोड़ने यह हैकी टाइमिंग कोड, क्या उस लिंक को रद्द करने का एक बेहतर तरीका है क्लिक करें?

2) अगर मैं अपना खुद का ईवेंट हैंडलर कोड _handleDragStop में जोड़ना चाहता हूं, तो मैं यह कैसे कर सकता हूं। मैंने कुछ बाइंड() कॉल करने की कोशिश की है, लेकिन मुझे ईवेंट नाम गलत होना चाहिए।

$('#vehicleScroller').bind('_handleDragStop',function(){ 
    console.log('_handleDragStop-vehicleScroller'); 
}); 

अद्यतन: यह मैं क्या कोशिश की है है

// adding some custom code to the scrollview to track the 
$.mobile.scrollview.prototype._handleDragMove = (function() { 
    var origDragMove = $.mobile.scrollview.prototype._handleDragMove; 
    return function __handleDragMove() { 
     $.util.SetLastMoveTime(); // this is the only new line of code 
     origDragMove.apply(this, arguments); 
    }; 
}()); 

तो जब मैं क्लिक करें घटना की प्रक्रिया, मैं जाँच: मैं scollview _handleDragMove घटना पर कुछ टेलीमेटरी कलम बांधने का काम निम्नलिखित कोड का उपयोग कर समाप्त हो गया यह देखने के लिए कि पर्याप्त समय बीत चुका है या नहीं।

this.SearchResultItemClick = function(){ 

    if($.util.WasScrolling()) { 
     event.stopPropagation(); 
     return false; 
    } 

यह सबसे बड़ा समाधान नहीं है, लेकिन ऐसा लगता है। पूर्णता के लिए, यहाँ मेरी उपयोगिता कार्य हैं:

LastMoveTime = 0; 

this.SetLastMoveTime = function(){ 
    LastMoveTime = getCurrentTime(); 
} 

function getCurrentTime() { return (new Date()).getTime(); } 

this.WasScrolling = function(){ 
    var then = LastMoveTime; 
    var now = getCurrentTime(); 
    var dif = now-then; 
    //console.log("then:"+then+", now:"+now+", dif:"+dif); 
    if(dif < 333){ 
     return true; 
    } 
    return false; 
} 
+0

मैंने अंतिम ड्रैममोव समय पर कब्जा करने के लिए स्क्रॉलव्यू में कुछ समय कोड जोड़ना समाप्त कर दिया: –

उत्तर

1

चेक आउट जवाब मैं this question को दिया था, लगता है आप इसे यहाँ की तरह इस्तेमाल कर सकते हैं, तो आप समय खामियों पर निर्भर करने के लिए नहीं होगा, यह एक समाधान है कि स्पर्श का आयोजन है घटनाएं ताकि आप ठीक से टैप और स्क्रॉल कर सकें, केवल कुछ पंक्तियों को समझने में काफी आसान है।

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