2015-11-11 6 views
6

मेरे पास एक साइट है जो एकल पृष्ठ के रूप में बनाई गई है और सभी अनुरोध AJAX के साथ किए गए हैं। पेज site.com/#Page या site.com/#Page/Other जैसे हैं।एकल पृष्ठ साइट के लिए नेविगेशन लिंक छोड़ें

अब, मुझे साइट पर Skip Navigation लिंक लागू करने की आवश्यकता है, लेकिन चूंकि URL # से शुरू होते हैं, इसलिए मैं एक साधारण एंकर का उपयोग नहीं कर सकता। क्या सभी यूआरएल को बदले बिना ऐसा करने का कोई तरीका है? धन्यवाद।

नोट: छोड़ नेविगेशन कम से कम 3 काम करता है: पृष्ठ के उस भाग को स्क्रॉल, तत्व सामग्री कहां से प्रारंभ (यह भी एक नहीं फ़ोकस करने योग्य तत्व, इस तरह के एक H1 शीर्षक के रूप में हो सकता है) पर ध्यान केंद्रित करने और स्क्रीन पाठकों को परिवर्तन के बारे में पता करने देता है।

+0

क्या आप एसपीए ढांचे का उपयोग कर रहे हैं? रूटिंग को संभालने के तरीके के बारे में जानकारी जानना उपयोगी होगा। उदाहरण के लिए कुछ [कोणीय के लिए संभावित समाधान] (http://stackoverflow.com/questions/14712223/how-to-handle-anchor-hash-linking-in-angularjs) उपयोगकर्ता हैं। – Jasen

+0

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

उत्तर

2

आप दो काम करने होते हैं:

(उपयोग tabindex
  • एक फ़ोकस करने योग्य तत्व = "- 1 "तत्व है जो h1 तरह डिफ़ॉल्ट)

  • फोकस जावास्क्रिप्ट यह का उपयोग करके फ़ोकस करने योग्य नहीं हैं के लिए/jQuery focus() विधि

  • +०१२३५१६४१०

उदाहरण:

document.getElementById("myEle").focus(); 

या

jQuery("#myEle").focus(); 
0

प्राप्त करने के लिए आप क्या चाहते हैं, तो आप JQuery में scrollTop() पर एक नज़र ले जा सकते हैं: https://api.jquery.com/scrollTop/

+0

'scrollTop' केवल विंडो को स्क्रॉल करता है, यह अन्य बातों को नहीं करता है जो मैंने _Note: _ में उल्लेख किया है। मुख्य समस्या यह है कि यह तत्व पर ध्यान केंद्रित नहीं करता है, इसलिए स्क्रीन पाठक वहां से पढ़ना शुरू नहीं करते हैं। –

0

मैं अंत में यह समझ से बाहर। मैं मूल रूप से

  1. पड़ा हैश से निपटने के लिए इस्तेमाल किया ढांचा/लिपि अक्षम बदलता है
  2. बदलें यूआरएल मुख्य सामग्री को इंगित करने के
  3. मूल URL पुनर्स्थापित करें और पुन: सक्षम मैं # 1 में क्या अक्षम ।

उदाहरण के लिए, मैं इस तरह की एक घटना थी:

var onPageChange = function (newLocation, historyData) { 
    // load page 
}; 

पहले, मैं यह करने के लिए बदल दिया है:

var pageChangeEnabled = true; 
var onPageChange = function (newLocation, historyData) { 
    if (pageChangeEnabled) { 
     // load page 
    } 
}; 

और फिर, Skip Navigation लिंक इस तरह दिखता है:

<a href="javascript:pageChangeEnabled=false;var oh=location.hash;location.hash='#content';location.hash=oh;pageChangeEnabled=true;void(0);" id='skipNav'>Skip Navigation</a> 

आसान समझने के लिए, यहमें कोड है:

// disable navigation 
pageChangeEnabled=false; 

// save current hash 
var oldHash=location.hash; 

// update the hash/anchor, make everything work 
location.hash = '#content'; 

// restore the old hash, as there are no elements that have the same 
// name of the URL, it works 
location.hash = oldHash; 

// re-enable page navigation 
pageChangeEnabled=true; 

// void(0); is just to avoid the navigation of the link 
void(0); 

अद्यतन: एडम द्वारा समझाया रूप में, यह पूरी तरह से काम नहीं करता है के रूप में कीबोर्ड नेविगेशन नहीं बदलता है। मैं कर रहा हूं: $('#content').attr('tabindex', '-1').focus();

+0

यह तत्व को कीबोर्ड फोकस नहीं देगा। (टैब दबाकर आपको पृष्ठ के पहले लिंक पर ले जाया जाएगा) – Adam

+0

@ एडम आप सही हैं। हालांकि मैंने आपके जवाब की कोशिश की है और काम नहीं किया है। मैंने कोशिश की (फिर से?) अब और यह एनवीडीए के साथ क्रोम पर सही काम करता है :) धन्यवाद। –

+0

यदि आप इसे किसी फ़ंक्शन में डालते हैं और इसे 'link_elem.onclick = scroll_top_function' के लिंक से जोड़ते हैं तो यह अधिक पठनीय और रखरखाव योग्य होगा –

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