मैं jQuery और jQuery-ui का उपयोग कर रहा हूं और विभिन्न वस्तुओं पर विभिन्न विशेषताओं को एनिमेट करना चाहता हूं।
यहाँ इस मुद्दे को समझाने के लिए मैंने इसे एक div में सरलीकृत किया है जो उपयोगकर्ता के ऊपर होने पर नीले से लाल रंग में बदल जाता है।
मैं उपयोग करते समय मनचाहा व्यवहार प्राप्त करने में सक्षम हूं animate()
, हालांकि ऐसा करते समय जिन शैलियों को मैं एनिमेट कर रहा हूं उन्हें एनीमेशन कोड में होना चाहिए और इसलिए मैं अपनी स्टाइल शीट से अलग हूं। ( उदाहरण 1 देखें )
एक विकल्प का उपयोग कर रहा है addClass()
और removeClass()
मैं उस सटीक व्यवहार को फिर से बनाने में सक्षम नहीं हूं जो मुझे मिल सकता है animate()
। ( उदाहरण 2 देखें )
उदाहरण 1
आइए अपने साथ लगे कोड पर एक नज़र डालें animate()
:
$('#someDiv')
.mouseover(function(){
$(this).stop().animate( {backgroundColor:'blue'}, {duration:500});
})
.mouseout(function(){
$(this).stop().animate( {backgroundColor:'red'}, {duration:500});
});
यह मेरे द्वारा देखे जा रहे सभी व्यवहारों को प्रदर्शित करता है:
- लाल और नीले रंग के बीच आसानी से एनिमेट करता है।
- उपयोगकर्ता द्वारा अपने माउस को जल्दी से और अंदर से बाहर ले जाने पर कोई एनीमेशन 'ओवरक्यू-आईएनजी' नहीं।
- यदि उपयोगकर्ता अपने माउस को बाहर ले जाता है / जबकि एनीमेशन अभी भी खेल रहा है, तो यह वर्तमान 'आधी' स्थिति और नए 'लक्ष्य' राज्य के बीच सही ढंग से ढल जाता है।
लेकिन चूंकि शैली में परिवर्तन परिभाषित किए गए हैं, इसलिए animate()
मुझे वहां के शैली मूल्यों को बदलना होगा, और यह सिर्फ मेरी स्टाइलशीट को इंगित नहीं कर सकता है। यह 'विखंडन' जहाँ शैलियों को परिभाषित किया जाता है, वह कुछ ऐसा है जो मुझे परेशान करता है।
उदाहरण 2
यहां मेरा वर्तमान सर्वश्रेष्ठ प्रयास है addClass()
और removeClass
(नोट करें कि एनीमेशन के लिए आपको jQuery-ui की आवश्यकता है)
//assume classes 'red' and 'blue' are defined
$('#someDiv')
.addClass('blue')
.mouseover(function(){
$(this).stop(true,false).removeAttr('style').addClass('red', {duration:500});
})
.mouseout(function(){
$(this).stop(true,false).removeAttr('style').removeClass('red', {duration:500});
});
यह मेरी मूल आवश्यकताओं की संपत्ति 1. और 2. दोनों को प्रदर्शित करता है, हालांकि 3 काम नहीं करता है।
मैं इसका कारण समझता हूं:
जब एनिमेटिंग addClass()
और removeClass()
jQuery तत्व में एक अस्थायी शैली जोड़ता है, और तब उपयुक्त मानों को बढ़ाता है जब तक कि वे प्रदान किए गए वर्ग के मूल्यों तक नहीं पहुंचते हैं, और केवल तब यह वास्तव में वर्ग को जोड़ता / हटाता है।
इसकी वजह से मुझे शैली की विशेषता को हटाना पड़ता है, अन्यथा यदि एनीमेशन को रोक दिया जाता है तो शैली की विशेषता आधी रह जाएगी और स्थायी रूप से किसी भी वर्ग मान को अधिलेखित कर देगी, क्योंकि एक टैग में शैली की विशेषताओं का वर्ग शैलियों की तुलना में अधिक महत्व है।
हालाँकि, जब एनीमेशन आधा हो जाता है, तब तक इसमें नया वर्ग नहीं जोड़ा जाता है, और इसलिए इस समाधान के साथ रंग पिछले रंग में कूद जाता है जब उपयोगकर्ता एनीमेशन पूरा होने से पहले अपने माउस को हिलाता है।
जो मैं आदर्श रूप से करना चाहता हूं वह कुछ ऐसा करने में सक्षम है:
$('#someDiv')
.mouseover(function(){
$(this).stop().animate( getClassContent('blue'), {duration:500});
})
.mouseout(function(){
$(this).stop().animate( getClassContent('red'), {duration:500});
});
जहां getClassContent
प्रदान की गई कक्षा की सामग्री वापस आएगी। मुख्य बात यह है कि इस तरह से मुझे अपनी शैली की परिभाषाएँ पूरी जगह पर नहीं रखनी हैं, लेकिन मैं अपनी स्टाइलशीट में उन्हें कक्षाओं में रख सकता हूँ।
getClassContent
लग रहा है?