2013-04-24 2 views
11

क्षैतिज स्क्रॉल करते समय पीछे या आगे जाने के लिए JQuery या मूल JS का उपयोग करके एक आधुनिक ब्राउज़र डिफ़ॉल्ट कार्यक्षमता को कैसे अक्षम कर सकता है?क्षैतिज स्क्रॉल करते समय किसी ब्राउज़र को इतिहास में वापस/आगे जाने से कैसे रोकें?

आमतौर पर यह ट्रैकपैड का उपयोग करते समय होता है और जब स्क्रॉल करने योग्य div के अंत तक स्क्रॉल किया जाता है।

+2

चालक और

यहाँ समाधान करता है, तो किसी भी एक और ने इस समस्या की तरह मैंने किया था भर आता है ट्रैकपैड सॉफ्टवेयर आपका ओवरलैर्ड है। इसे देखें [प्रश्न का उत्तर] (http://stackoverflow.com/questions/14086337/is-it-possible-to-have-gestures-with-trackpads)। – SimonDever

उत्तर

6

इसलिए मुझे लगा कि मैंने एक वेब ऐप बनाया है, इसलिए उपयोगकर्ता को किसी भी सहेजे गए परिवर्तनों के लिए संकेत क्यों न दें जो उपयोगकर्ता को किसी भी सहेजे गए परिवर्तन को खोने या ब्राउज़र इतिहास में पिछले या अगले पृष्ठ पर समाप्त होने से रोक देगा।

window.onbeforeunload = function(e) { 
    return 'Ask user a page leaving question here'; 
}; 
+0

यह फ़ायरफ़ॉक्स 37 – RezaRahmati

+0

पर काम नहीं करता है 'e.preventDefault(); झूठी वापसी; ' – Jacksonkr

18
history.pushState(null, null, location.href); 
window.onpopstate = function(event) { 
    history.go(1); 
}; 

डेमो: http://jsfiddle.net/DerekL/RgDBQ/show/

आप पिछले वेबपेज के लिए वापस जाना, जब तक आप वापस बटन स्पैम या वापस बटन दबाए रखें और पिछली प्रविष्टि का चयन नहीं कर सकेंगे।

नोट: onpopstate (या घटना onbeforeunload) आईओएस पर काम नहीं कर रहा है।

+2

कोई अपराध नहीं है लेकिन ब्राउजर इतिहास में हेरफेर करना उपयोगकर्ता अनुभव के मामले में बहुत बुरा है। यह बहुत भ्रमित और परेशान है। देख सकते हैं कि –

+4

पर आपका क्या हो रहा है यदि आप बैक बटन दबाए रखते हैं तो भी आप वापस जा सकते हैं। – 10basetom

+1

@steve वास्तव में अगर कोई कारण नहीं है तो यह बुरा है। लेकिन कम से कम अस्थायी रूप से इस तरह से छेड़छाड़ करने के लिए कानूनी मामले हैं ... एक मामला मैं इसे लागू करना चाहता हूं, सीएसएस के उपयोग से अनचाहे इतिहास के निशान को छोड़ने के लिए है [: target] (https: //developer.mozilla .org/en-US/दस्तावेज़/वेब/सीएसएस /: लक्ष्य) छद्म वर्ग। या शायद, इतिहास अक्षम करें, और इसके बजाय एक कस्टम 'बैक बटन' प्रदान करें। – hexalys

3

यदि आप मैक पर हैं तो यह ट्रैक पैड जेस्चर के कारण होता है।

System Preferences -> Trackpad -> More Gestures. 

नहीं जे एस समाधान आप देख रहे हैं, लेकिन अगर आप बस इसे खुद के लिए रोकना चाहते हैं, आप सुविधा को बंद कर सकते हैं।

+0

आप बिल्कुल सही हैं, वे ब्राउज़र में आगे और आगे कूदने के इतने परेशान तरीके को क्यों लागू करेंगे? मुझे लगता है कि जब आप एक क्षैतिज स्क्रॉल फलक में कुछ देखने की कोशिश कर रहे हैं तो यह किसी भी उपयोगकर्ता के लिए बहुत परेशान है। –

2

क्रोम और सफारी में काम करता है (यानी क्रोम और सफारी के साथ परीक्षण):

// el === element on which horizontal scrolling is done 
// (can be container of scrolled element or body or any other ancestor) 
var preventHistoryBack = function (e) { 
    var delta = e.deltaX || e.wheelDeltaX; 

    if (! delta) { 
    return; 
    } 

    window.WebKitMediaKeyError /*detect safari*/ && (delta *= -1); 

    if (((el.scrollLeft + el.offsetWidth) === el.scrollWidth && delta > 0) || (el.scrollLeft === 0 && delta < 0)) { 
    e.preventDefault(); 
    } 
}; 
el.addEventListener('mousewheel', preventHistoryBack); 
+1

नोट," व्हील "और" मूसवेल "थोड़ा अलग तरीके से संचालित होता है: https://stackoverflow.com/questions/25204282/mousewheel-wheel-and-dommousescroll-in-javascript – Jacksonkr

+0

यह काम करता है, लेकिन क्रोम 51 के बाद से आप देखेंगे '[उल्लंघन] गैर-निष्क्रिय घटना श्रोता को कंसोल में स्क्रॉल-अवरुद्ध' व्हील 'ईवेंट' संदेश में जोड़ा गया। लेकिन हमें nonpassive घटना की आवश्यकता है, क्योंकि हम 'preventDefault' कहते हैं, और यह स्पष्ट नहीं है कि उस संदेश को दबाने के लिए कैसे – Klimashkin

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