सीएसएस होवर बनाम जावास्क्रिप्ट माउसओवर [बंद]


84

ऐसे समय होते हैं जब मेरे पास एक सीएसएस तत्व का उपयोग करने के बीच एक विकल्प होता है: किसी पृष्ठ पर HTML तत्वों की उपस्थिति को नियंत्रित करने के लिए होवर या जावास्क्रिप्ट ऑनमूवर। निम्नलिखित परिदृश्य पर विचार करें जहां एक div एक इनपुट लपेटता है

<div>
<input id="input">
</div>

मैं चाहता हूं कि जब माउस कर्सर div पर हो तो बैकग्राउंड कलर बदलने के लिए इनपुट चाहिए। सीएसएस दृष्टिकोण है

<style>
  input {background-color:White;}
  div:hover input {background-color:Blue;}
</style>

<div><input></div>

जावास्क्रिप्ट दृष्टिकोण है

<div onmouseover="document.getElementById('input').style.backgroundColor='Blue';">
  <input id="input">
</div>

प्रत्येक दृष्टिकोण के फायदे और नुकसान क्या हैं? क्या सीएसएस दृष्टिकोण अधिकांश वेब ब्राउज़रों के साथ अच्छी तरह से काम करता है? क्या css की तुलना में JavaScript धीमी है?


1
CSS दृष्टिकोण को जावास्क्रिप्ट की आवश्यकता नहीं है।
पीडी।

मैं जो भी उपयोग करने की सलाह
दूंगा

3
"जावास्क्रिप्ट सीएसएस की तुलना में धीमी है?" आप इसे नोटिस नहीं करेंगे, लेकिन जावास्क्रिप्ट अधिक संसाधनों का उपभोग करेगा और चीजों को धीमा कर सकता है यदि एक ही समय में कई अन्य स्क्रिप्ट चल रही हों (हाथ में डिवाइस, मोबाइल वेबसाइटों के लिए पूरी तरह से सोचें), और यह वह नहीं है जिसके लिए इसका उपयोग किया जाना चाहिए। दूसरी ओर सीएसएस कम संसाधनों का उपयोग करते हैं और वास्तव में प्रस्तुति के लिए होते हैं। आपको केवल वेबसाइट नेविगेशन और कार्यक्षमता को बढ़ाने के लिए जावास्क्रिप्ट का उपयोग करना चाहिए, लेकिन यह अभी भी उन उपयोगकर्ताओं के लिए नेविगेट करने योग्य होना चाहिए जो बिना js सक्षम हैं। मैं सीएसएस का सुझाव देता हूं: हॉवर दृष्टिकोण।
जोस फेटी

1
यह एक पुराना प्रश्न है, इसलिए यह आश्चर्य की बात नहीं है कि उपरोक्त टिप्पणी अब मान्य नहीं है, और कभी नहीं हो सकती है। एक कारण अच्छे जेएस पुस्तकालयों की कमी है जो उच्च प्रदर्शन वाले बॉयलरप्लेट प्रदान करते हैं (पारिवारिक। देखें)। एक और बात यह है कि आधुनिक ब्राउज़रों में जेएस इंजन, डेस्कटॉप और मोबाइल दोनों ही काफी तेज हैं। देशी C संकलित कोड के प्रदर्शन को 80% तक मापने वाला एक बेंचमार्क है। बेशक अपवाद मामले हैं, लेकिन ब्राउज़र में जेएस का प्रभावशाली प्रदर्शन अभी भी खड़ा है। क्या लोग वास्तव में "मतलब" है कि डोम धीमा है। जेएस काफी तेज है, उन्होंने कभी इसे महसूस नहीं किया।
अपराह्न

जवाबों:


59

के साथ समस्या: मंडराना है कि IE6 केवल लिंक पर इसका समर्थन करता है। मैं इन दिनों इस तरह की चीजों के लिए jQuery का उपयोग करता हूं:

$("div input").hover(function() {
  $(this).addClass("blue");
}, function() {
  $(this).removeClass("blue");
});

चीजों को बहुत आसान बनाता है। वह IE6, FF, Chrome और Safari में काम करेगा।


मैं एक त्वरित परीक्षण किया ... जाहिरा तौर पर IE7 div का समर्थन नहीं करता: होवर ??
जॉन

हां, IE7 में CSS2 के लिए 50% समर्थन जैसा कुछ है। कई वेब डिज़ाइनर इसका कारण नहीं बन सकते।
एलन

लेकिन उन सभी ट्रैकर्स, स्निफ़र्स और हैकर्स के साथ जो सैंडबॉक्स का दुरुपयोग करते हैं जितना वे समझ सकते हैं। ऐसा नहीं है कि यह ट्रैकिंग के खिलाफ मदद करता है, लेकिन इसकी समझ यह है कि लोग इसे कठिन बनाने की कोशिश करते हैं। मुझे पता है कि लोग कुकीज़ की अनुमति नहीं देते हैं। और उनके पास इसके लिए भी वैध कारण हैं, बस फायरशीप को देखें। मैंने अभी भी आपके उत्तर को गलत ठहराया है, क्योंकि मुझे अच्छा लगेगा यदि लोग 2013 में पहुंचेंगे, तो महसूस करेंगे कि उन्हें वैसे भी ट्रैक किया गया है और मेरे (हमारे!) पसंदीदा खिलौने को सक्षम किया है।
जस्सा

मुझे आश्चर्य है कि अगर मेट्रौई उपयोगकर्ताओं को जावास्क्रिप्ट को अक्षम करने में सक्षम है: पी लेकिन गंभीरता से, क्रोमोस, मोज़िला के ओएस, मेट्रियो सभी जावास्क्रिप्ट का उपयोग करते हैं। html5, css3, वेबलॉग और जावास्क्रिप्ट कुछ वर्षों में क्लाइंट साइड एप्स बनाने के लिए भाषाएं होंगी। बस धैर्य रखें, जल्द ही ब्राउज़र के बाहर जावास्क्रिप्ट होगी, अब इसे ब्राउज़र में अक्षम करने की आवश्यकता नहीं है :)
jascha

32

CSS एक बहुत अधिक बनाए रखने योग्य और पठनीय है।


18
यह बनाए रखने योग्य है जब तक आपको IE6 को गैर- <तत्वों पर समर्थन नहीं करना है। फिर यह एक दर्द है क्योंकि आपको जेएस-हैक का उपयोग करना होगा। लेकिन CSS अभी भी मेरा पसंदीदा तरीका है। बता दें कि 1999 ब्राउजर का इस्तेमाल करने वाले लोगों को 1999 का अनुभव है।
टायसन

4
लोगों को यह अद्यतन करना चाहिए यह सबसे अच्छा समाधान है ... मैं एक टैग जोड़ने का सुझाव दूंगा जो ब्राउज़र का पता लगाता है और आईई <7 का उपयोग करने पर उन्हें अपडेट करने के लिए कहता है
ट्रैविस पेसेटो

11

क्यों न दोनों? एनिमेटेड प्रभाव के लिए jQuery का उपयोग करें और सीएसएस फॉलबैक के रूप में। यह आपको सुंदर घटाव के साथ jQuery के लाभ देता है

सीएसएस:

a {color: blue;}
a:hover {color: red;}

jQuery ( चेतन रंग के लिए jQueryUI का उपयोग करता है ):

$('a').hover( 
  function() {
    $(this)
      .css('color','blue')
      .animate({'color': 'red'}, 400);
  },
  function() {
    $(this)
      .animate({'color': 'blue'}, 400);
  }
);

डेमो


1
CSS बदलावों के साथ, मैं तर्क दूंगा कि आपको केवल जावास्क्रिप्ट का उपयोग एक कमबैक के रूप में करना चाहिए: जब होवर पुराने IE ब्राउज़रों में गैर एंकर टैग पर लागू होता है।
एडम यंगर्स

Jsbin में कुछ बदलावों ने डेमो को काम नहीं किया। मैंने jQuery के वर्तमान संस्करण को संदर्भित करने के लिए डेमो को अपडेट किया, और सभी फिर से काम करता है।
राजाजेफ्रे

10

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


धन्यवाद - यह वास्तव में उस प्रश्न का उत्तर देता है जिसकी मुझे तलाश थी! :-)
पीटर एस मैग्नेसन

6

एक बहुत बड़ा अंतर यह है कि जब माउस तत्व से बाहर निकलता है तो ": होवर" स्थिति स्वचालित रूप से निष्क्रिय हो जाती है। परिणामस्वरूप कोई भी शैली जो होवर पर लागू होती है, स्वतः ही उलट जाती है। दूसरी ओर, जावास्क्रिप्ट दृष्टिकोण के साथ, आपको "ऑनमाउसओवर" और "ऑनमाउसआउट" दोनों घटनाओं को परिभाषित करना होगा। यदि आप केवल "onmouseover" को परिभाषित करते हैं, तो "onmouseover" लागू होने वाली शैलियाँ आपके माउस से बाहर निकलने के बाद भी बनी रहेंगी, जब तक कि आपने "onmouseout" को स्पष्ट रूप से परिभाषित नहीं किया है।


6

संपादित करें: यह उत्तर अब सही नहीं है। CSS अच्छी तरह से समर्थित जावास्क्रिप्ट है (पढ़ें: JScript) अब किसी भी वेब अनुभव के लिए बहुत आवश्यक है, और कुछ लोग जावास्क्रिप्ट को अक्षम करते हैं।

मूल जवाब, 2009 में मेरी राय के रूप में।

मेरे सर के ऊपर से चला गया:

CSS के साथ, आपके पास ब्राउज़र समर्थन के साथ समस्याएँ हो सकती हैं।

JScript के साथ, लोग jscript को निष्क्रिय कर सकते हैं (यानी मैं क्या करूँ)।

मेरा मानना ​​है कि पसंदीदा तरीका HTML में सामग्री, CSS के साथ लेआउट, और JScript में कुछ भी गतिशील है। तो इस उदाहरण में, आप शायद सीएसएस दृष्टिकोण लेना चाहते हैं।


3
आप जावास्क्रिप्ट को अक्षम क्यों करेंगे? आप पूर्व-सहस्राब्दी अनुभव पसंद करते हैं?
एलेक्स

5
क्योंकि यह एक सुरक्षा जोखिम है, और वैसे भी कई साइटें जावास्क्रिप्ट का दुरुपयोग करती हैं। मैं "नोस्क्रिप्ट" नामक एक निफ्टी फ़ायरफ़ॉक्स प्लगइन का उपयोग करता हूं जो आपको चुनिंदा स्क्रिप्ट को केवल उन साइटों से सक्षम करने देता है जो आप चाहते हैं।
एलन

5

दोनों के बीच ध्यान रखने के लिए एक और अंतर है। सीएसएस के साथ, :hoverराज्य हमेशा निष्क्रिय रहता है जब माउस एक तत्व को स्थानांतरित करता है। हालांकि, जावास्क्रिप्ट के साथ, onmouseoutघटना को निकाल नहीं दिया जाता है जब माउस शेष पेज के बजाय ब्राउज़र क्रोम पर तत्व को स्थानांतरित करता है।

यह आपके विचार से अधिक बार होता है, खासकर जब आप कस्टम होवर राज्यों के साथ अपने पृष्ठ के शीर्ष पर एक नावबार बना रहे होते हैं।


4

Internet Explorer में, <MMO तत्व के अलावा अन्य तत्वों पर काम करने के लिए hover चयनकर्ता के लिए <! DOCTYPE> घोषित किया जाना चाहिए।


3

CSS का उपयोग करें, यह स्टाइल के बहुत आसान प्रबंधन के लिए खुद को बनाता है।


2

होवर करने के लिए jQuery का उपयोग करने के संबंध में , मैं हमेशा प्लगइन HoverIntent का उपयोग करता हूं क्योंकि यह घटना को आग नहीं देता है जब तक कि आप समय की संक्षिप्त अवधि के लिए एक तत्व पर रोक नहीं देते हैं ... यदि आप गलती से चलाते हैं तो यह बहुत अधिक माउस को बंद कर देता है। उन पर माउस या बस एक विकल्प का चयन करते हुए।


0

यदि आपको जावास्क्रिप्ट के साथ IE6 के लिए 100% समर्थन की आवश्यकता नहीं है, तो आप IE सशर्त टिप्पणियों के साथ ie7-js जैसे कुछ का उपयोग कर सकते हैं । तो फिर तुम बस hover प्रभाव लागू करने के लिए सीएसएस नियमों का उपयोग करें। मुझे ठीक से पता नहीं है कि यह कैसे काम करता है, लेकिन यह IE7 और 8 में सामान्य रूप से काम नहीं करने वाले कई सीएसएस नियमों का काम करने के लिए जावास्क्रिप्ट का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.