2017-02-18 13 views
9

मैं ionic2 देखने में एक स्लाइडर (वास्तव में एक रसोई टाइमर) एक pan जेस्चर का उपयोग करके स्थापित करने के लिए कोशिश कर रहा हूँ: http://ionicframework.com/docs/v2/components/#gesturesरणनीति एक ऊपरी बाध्य

स्लाइडर/टाइमर के पास एक खुली ऊपरी बाउंड है जिसे panright द्वारा सेट किया जा सकता है, लेकिन panleft पर शून्य पर नीचे जा सकता है।

मैं 3612 के करीब ऊपरी सीमाओं को अनुमति देने के लिए pan ईवेंट का सबसे अच्छा अनुवाद कैसे कर सकता हूं लेकिन 10 के रूप में छोटे से वृद्धि को सेट करने के लिए पर्याप्त संवेदनशील? अधिकतम deltaX लगभग 400px होगा, लेकिन मुझे लगता है कि उपयोगकर्ता एक बड़े मूल्य तक पहुंचने के लिए कुछ pan संकेतों का उपयोग कर सकता है।

क्या कुछ तैयार-निर्मित easing फ़ंक्शन है जिसका उपयोग मैं इसे प्राप्त करने के लिए कर सकता हूं?

+0

आप हथौड़ा द्वारा दिए गए 'deltaX' और' velocityX' पैरामीटर गठबंधन करने के लिए करने की कोशिश की: यहाँ उस के लिए एक कोड है? फिर अपने परिवर्तन को [अपनी पसंद के आसान वक्र] के माध्यम से गणना करें (http://gizma.com/easing/) - "पैनिंग" के दौरान आसान-जैसे कुछ और फिर आसान हो रहा है। – Riron

उत्तर

0

बस संक्षेप में सोच:

आप 2 तक पैन घटनाओं के बीच परिमाण का पता लगा सकता। यदि यह काफी छोटा है, तो आप वृद्धि की छोटी ग्रैन्युलरिटी की अनुमति दे सकते हैं। दूसरी ओर, यदि आप इसे काफी बड़ा तय करते हैं, तो आप बड़ी वृद्धि के लिए अनुमति दे सकते हैं। सिद्धांत रूप में आप पैन इवेंट के दौरान लगातार यह जांच कर सकते हैं, यहां तक ​​कि ऊपरी बाउंड को गतिशील रूप से प्रभावित कर सकते हैं (हालांकि यह सुनिश्चित नहीं है कि यह प्रासंगिक क्यों है)।

मुझे नहीं पता कि आपको इस मामले में ऊपरी सीमा के बारे में चिंता करने की आवश्यकता क्यों है। क्या आप व्यख्या कर सकते हैं?

0

रीरॉन की टिप्पणी का उपयोग करके, आप deltaX द्वारा velocityX को गुणा कर सकते हैं। मैंने एक त्वरित परीक्षण में देखा कि गति आसानी से 8 से अधिक हो सकती है और 1 से कम (उदाहरण के लिए 0.5)। डेल्टा दसियों या सैकड़ों में हो सकता है, इसलिए यह दोनों आवश्यक संवेदनाओं की अनुमति देता है।

hammerObj.on("panright panleft", 
    function(ev){ 
     if(ev.type == "panright"){ 
      timer += ev.speedX * ev.deltaX; 
      //timer = Math.min(36000, ev.speedX*ev.deltaX+timer); for an upper bound of 36000 instead of unbound 
     } else if (ev.type == "panleft"){ 
      timer = Math.max(0, timer - (ev.speedX * ev.deltaX)); 
     } 
    } 
संबंधित मुद्दे