2009-12-03 4 views
7

मेरे पास पेज फोल्ड पर फैले कई फॉर्म फ़ील्ड हैं। प्रत्येक इनपुट/चयन फ़ील्ड के माध्यम से चरणबद्ध करने के लिए "टैब" कुंजी दबाते समय यह पृष्ठ के तह के नीचे अगले फ़ील्ड पर बैठता है।फोकस या टैब कुंजी पर इनपुट दबाया गया, स्क्रीन के केंद्र में जाएं

मेरे कुछ फ़ील्ड में टूल टिप्स, सत्यापन प्रतिक्रियाएं और ऑटो सुझाव बॉक्स हैं जो फ़ील्ड के नीचे दिखाई देते हैं। फ़ील्ड पर टैबबिंग करते समय, आप पेज तत्वों के नीचे इन तत्वों को नहीं देख सकते हैं।

क्या कोई जावास्क्रिप्ट या jQuery स्क्रिप्ट है जो निचले स्तर पर संरेखित करने के बजाय एक केंद्रित इनपुट/टेक्स्टरेरा/चयन/बटन फ़ील्ड के चारों ओर स्क्रीन को लंबवत रूप से केंद्रित कर सकती है?

+2

मैं दूसरों के बारे में पता नहीं है ऊपर से एक ही है, लेकिन * एक स्क्रीन स्थिति परिवर्तन हर बार जब मैं फ़ोकस बदलने मुझे * पागल ड्राइव करेंगे। मैं एक ऐसा समाधान पसंद करूंगा जो केवल ऑफसेट को स्क्रॉल करता है जब आवश्यक तत्वों में से एक पूरी तरह व्यूपोर्ट के भीतर नहीं होता है। –

+0

तो क्या मेरा जवाब आपके लिए काम करता है? अगर आपकी समस्या के लिए संतुष्ट नहीं है तो कृपया एक टिप्पणी दें – jitter

+0

@ पेक्का मैं मानता हूं कि यह एक असाधारण कार्रवाई है और इसे कम से कम इस्तेमाल किया जाएगा क्योंकि यह परेशान होगा। बस एक उपयुक्त समाधान के बारे में सोचने की कोशिश कर रहा है - हो सकता है कि केवल "फ़ील्ड" फोकस पर न हो या शायद स्क्रॉलिंग को एनिमेट करें। अन्यथा पेज फोल्ड से फोकस इनपुट को रखने के कुछ अन्य तरीके क्या हैं? –

उत्तर

14

आप केवल फोकस ईवेंट से जुड़ सकते हैं और फिर फ़ील्ड के ऑफसेट की गणना कर सकते हैं और स्क्रीन पर इसे केन्द्रित कर सकते हैं।

$(':input').focus(function(){ 
    var center = $(window).height()/2; 
    var top = $(this).offset().top ; 
    if (top > center){ 
     $(window).scrollTop(top-center); 
    } 
}); 
+0

मुझे लगता है कि यह मेरे प्रश्न का सबसे आसान समाधान है, लेकिन टिप्पणी के अनुसार, कार्रवाई मानक नहीं है और ज्यादातर मामलों में एक कष्टप्रद कार्रवाई हो सकती है - इस समाधान के लिए व्यावहारिक उपयोग करने के लिए सवाल को थोड़ा सा परिभाषित करने की आवश्यकता है। –

+0

कुछ चेक करने से, यह मान सही हो जाता है लेकिन विंडो या दस्तावेज़ स्क्रॉलटॉप() गेंद को खेलना नहीं चाहता ... मैंने इसे div id (#div) में बदल दिया है .scrollTop जो लगभग यह करता है लेकिन है ' टी के रूप में संगत के रूप में मैं शरीर या खिड़की होने की उम्मीद करेंगे। –

+0

फ़ायरफ़ॉक्स और/या क्रोम के साथ कभी-कभी समस्याएं होती हैं। आप '$ ('html, body') का प्रयास कर सकते हैं। एनिमेट ({scrollTop: top-center}, 300); 'यह मेरे लिए काम करता है – schemar

1

सबसे आसान बात jQuery ScrollTo plugin और jQuery Viewport प्लगइन शामिल करने के लिए किया जाएगा।

फिर प्रत्येक इनपुट + संबंधित अन्य तत्वों (सत्यापन प्रतिक्रिया, ....) को एक div में लपेटें।

फोकस पर जांच करें कि क्या div पूरी तरह से दिखाई दे रहा है, अगर scrollTo का उपयोग न करें। किया हुआ।

बेशक यह एक ब्लोट का थोड़ा सा है, लेकिन यदि आप 2 और निर्भरताओं के साथ रह सकते हैं और अतिरिक्त ~ 4 केबी यह गणना स्वयं किए बिना काम करना चाहिए।

1

चिकनी स्क्रॉल प्रभाव से

$(':input').focus(function() { 
     var center = $(window).height()/2; 
     var top = $(this).offset().top; 
     if (top > center) { 
      $('html, body').animate({ scrollTop: top - center }, 'fast');    
     } 
    }); 
+1

का उपयोग करना बढ़िया! धन्यवाद दोस्त। –

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