अगर आप एक बटन हैं, तो आपका काम बस एक ही है
(unsung.aresluna.org)- फोटो को घुमाने जैसे साधारण बटन में भी तेज़ दोहराए गए input को कैसे handle किया जाता है, इससे user experience काफी बदल जाता है
- iPhone कई बार दबाए गए 90-degree rotate input को याद रखता है और animation खत्म होते ही अगला rotation जारी कर देता है
- Nothing Phone/Android haptics और sound से tap confirm करता है, लेकिन rotation animation के दौरान आए बाद के taps को ignore कर देता है
- document photos की कई images rotate करनी हों, तो casual photo-editing UI से भी तेज़ और predictable controls की उम्मीद होती है
- बटन को user से animation खत्म होने तक इंतज़ार करवाने के बजाय tap buffering या animation interrupt/acceleration के जरिए input स्वीकार करना चाहिए
फोटो rotate बटन repeated input को कैसे handle करता है
- photo rotate button को एक बार दबाने पर आम तौर पर counterclockwise 90-degree rotation होता है, और फिर दबाने पर वही action repeat होता है—यह एक standard control है
- rotation animation यह दिखाता है कि photo की orientation कैसे बदल रही है, जिससे user अपना sense of direction न खोए
- अगर आप तेजी से 8 बार 90-degree rotation दबाएँ, तो engineers जिसे “no op” कहते हैं, वैसा होना चाहिए: image दो चक्कर लगाकर अपनी original orientation में लौट आए
- iPhone पर यह उम्मीद सच में पूरी होती है
- यह fast tap inputs को याद रखता है
- पिछला rotation खत्म होते ही queued अगला rotation execute करता है
- Nothing Phone/Android पर नतीजा अलग आता है
- button haptics और sound से tap confirmation देता है
- अगर पिछला rotation animation खत्म नहीं हुआ है, तो नया tap ignore कर देता है
casual UI में भी repeated tasks के लिए मजबूत input handling चाहिए
- Situational disability यह concept है कि disability सिर्फ कुछ लोगों को ही नहीं होती; कोई भी व्यक्ति किसी खास स्थिति में effectively disability experience कर सकता है
- photo लेना आम तौर पर casual use के करीब है, लेकिन phone camera नीचे की ओर करके shoot करते समय photo orientation को लेकर भ्रमित हो सकता है
- अगर कई landscape document photos लेने के बाद हर एक को rotate करना पड़े, तो user को photos को एक-एक करके दर्जनों बार rotate करना पड़ सकता है
- ऐसे में, button को अपनी इच्छित speed पर तीन बार दबाने पर भी predictable तरीके से काम करना ज्यादा pleasant और कम झंझट वाला होता है
- पर्याप्त लंबे समय या बड़े user group को देखें, तो casual interfaces को भी ऐसे moments मिलते हैं जहाँ उन्हें ज्यादा गंभीरता से लेना पड़ता है
- ऐसी “situational power-user-ness” phone photo editing या GarageBand जैसे examples में भी दिखती है
- समाधान जरूरी नहीं कि tap buffering ही हो
- interrupt-style tap आने पर animation को रोका या तेज भी किया जा सकता है
- मूल बात यह है कि user को animation खत्म होने का इंतज़ार करने के लिए मजबूर न किया जाए
2 टिप्पणियां
Hacker News राय
अगर उपयोगकर्ता गलती से बहुत ज़्यादा क्लिक कर दे, या उसे लगे कि पहला क्लिक दर्ज ही नहीं हुआ, तो क्या करना चाहिए?
अभी भी Steve Jobs का वह keynote याद आता है जिसमें वह दिखा रहे थे कि नए macOS में PDF दस्तावेज़ कितनी तेज़ी से दिखते हैं। इंजीनियरों ने स्क्रीन पर PDF स्क्रॉल करने के लिए एक बटन बना रखा था, लेकिन Jobs ने गलती से उसे एक से ज़्यादा बार दबा दिया और कहा, “क्या यह दो बार अंत तक स्क्रॉल करेगा?” और सचमुच व्यवहार buffer हो गया। आखिरकार उन्हें ऊपर वापस जाना पड़ा और दूसरे स्क्रॉल के खत्म होने तक इंतज़ार करना पड़ा
Jobs ने बात संभालते हुए कहा, “दस्तावेज़ को दूसरी बार सरसरी तौर पर देखने में लगने वाला समय जोड़ दें, तब भी यह पिछले OS के PDF से तेज़ है”
Debouncing किसी वजह से मौजूद है। कुछ मामलों में बटन को दो बार दबाने पर वह दो बार चलना चाहिए, और कुछ में नहीं। किस स्थिति में कौन-सा व्यवहार बेहतर है, यह तय करना आसान नहीं है
कम-से-कम यह तो सोचना चाहिए कि किस स्थिति में कौन-सी हैंडलिंग सही है। UI में कुछ बटन ऐसे होते हैं जहाँ एक पक्ष साफ़ तौर पर सही लगता है, और कुछ में उल्टा साफ़ होता है, लेकिन कुछ मामले धुंधले होते हैं, जहाँ दोनों व्यवहार का बचाव किया जा सकता है, और तब नतीजा असंगत UI बनता है
अच्छा समाधान क्या है, यह पक्का नहीं पता
लेख के मुताबिक:
यही समस्या है। ऐप ने जितनी बार बटन इनपुट दर्ज होने की पहचान दी है, उतनी ही बार वास्तविक कार्रवाई भी होनी चाहिए। Debouncing अच्छी प्रैक्टिस है, लेकिन अगर इसका इस्तेमाल करना है, तो debounced tap पर feedback नहीं देना चाहिए
“अगर उपयोगकर्ता गलती से बहुत ज़्यादा क्लिक कर दे, या उसे लगे कि पहला क्लिक दर्ज नहीं हुआ?” वाले हिस्से में accessibility की बात आने से मैं काफ़ी उलझ गया। क्योंकि मेरे मन में तुरंत ऐसे व्यक्ति का ख़याल आया जिसके हाथ काँपते हों और जो एक बार दबाने की कोशिश में दो बार दबा दे
और कुछ लोग हर बटन को double-click भी करते हैं। ऐसे मामलों को संभालने के लिए
onclickमें submit बटन को disable करना बहुत आम हैमैं पहले जैसा Apple/Mac/Jobs fanboy नहीं रहा, लेकिन मुझे वे Apple प्रस्तुतियाँ याद आती हैं जो ऐसे लगती थीं जैसे कोई सचमुच कुछ शानदार दिखाना चाहता हो
हाल की Apple प्रस्तुतियाँ बहुत कठोर, गैर-मानवीय, और सूट पहने लोगों द्वारा चलाई जा रही चीज़ जैसी लगती हैं, इसलिए मैं उन्हें अंत तक देख भी नहीं पाया। सब लोग ऐसे रोबोट लगते हैं जो भावनाएँ और इंसानीपन छिपा रहे हों, मानो पवित्र स्क्रिप्ट से हटे तो नौकरी से निकाल दिए जाएँगे
हो सकता है यह विषय से हटकर हो, लेकिन इससे याद आता है कि Jobs की थोड़ी बिखरी हुई तात्कालिक प्रस्तुतियाँ भी कितनी आनंददायक थीं
“तो फिर ऐसे मामले का क्या?” कहने के लिए यह स्थिति बिल्कुल सही उदाहरण नहीं है। इसके दो कारण हैं:
मैं दूसरी जगह उठे “Debouncing का क्या?” वाले तर्क का समर्थन करना चाहता हूँ, और लेखक को इसे यूँ ही नज़रअंदाज़ नहीं करना चाहिए
लेकिन मुझे you had one job meme भी पसंद नहीं, और मैं इसके बिना सोचे-समझे इस्तेमाल का विरोध करना चाहता हूँ। ज़्यादातर मामलों में यह meme ग़लत होता है, और बटनों के मामले में भी आम तौर पर यही सच है। एक सामान्य user interface में कोई खास बटन एक साथ कई भूमिकाएँ निभाता है:
बटन के लिए “सिर्फ़ एक काम” वाली अभिव्यक्ति बहुत फ़िट नहीं बैठती। बटन को सिर्फ़ क्लिक करने लायक होना ही नहीं, बल्कि कई काम करने होते हैं
क्लिक होने पर feedback, mouse hover पर feedback, loading state, disabled state, और इन सबके संयोजन होते हैं। यह बहुत निराशाजनक भी लग सकता है। उदाहरण के लिए, अगर आप backend service से जुड़े बटन को दबाते हैं और कोई visual feedback नहीं मिलता, तो आपको पता ही नहीं चलता कि बटन दबा भी या नहीं। अगर loading state भी न हो, तो यह भी नहीं पता चलता कि पीछे कुछ प्रोसेस हो रहा है, और फिर आप उसे बार-बार दबाते रहते हैं
लेखक चाहता है कि किसी भी गति से तीन बार क्लिक करने पर हमेशा वही फ़ंक्शन लगातार चले। वह तेज़ी से तस्वीरें पलटते हुए हर एक को अनुमानित तरीके से rotate करना चाहता है, और यह वाजिब है
लेखक इसे accessibility के आधार पर सही ठहराता है
लेकिन पूरी तरह उलटा तर्क भी कल्पना किया जा सकता है। उदाहरण के लिए, जिन लोगों को motor impairment या Parkinson's disease है, वे तब ऐसा व्यवहार जो अतिरिक्त clicks को अनदेखा कर दे ज़्यादा पसंद कर सकते हैं, जब उनका इरादा पहले ही तय हो चुका हो
इसे सही तरीके से बनाना मुश्किल है
iOS में Ignore Repeats नाम का accessibility option है, लेकिन वह पूरे system की setting है, इसलिए यह बेहतर तरीका लगता है। जिन लोगों को ऐसी correction चाहिए, उन्हें इसका लाभ on-screen keyboard जैसी जगहों पर भी मिल सकता है, और बाकी सभी लोगों की typing भी धीमी करने की ज़रूरत नहीं पड़ती
मुझे नहीं लगता कि हर UI widget को ऐसी चीज़ों तक सोचना चाहिए
इसे शायद device-wide setting के रूप में संभाला जा सकता है। उदाहरण के लिए, 50px के भीतर वाले taps अगर 100ms के अंदर दोहराए जाएँ तो उन्हें ignore कर दिया जाए
पूरी तरह सहमत। Parkinson's disease तक बात न भी जाए, तब भी बहुत ज़्यादा बुज़ुर्ग न होते हुए भी उम्रदराज़ लोगों को फोन और touchscreen इस्तेमाल करते देखो, तो समझ आता है कि छोटे button को सही जगह दबाना और “मैंने दबाया” जैसा एहसास पाना अक्सर मुश्किल होता है
इसलिए accessibility के नज़रिए से Nothing Phone का व्यवहार कहीं ज़्यादा उपयुक्त लगता है। ऐसे users किसी image को किसी खास जगह रखने के लिए गिन-गिनकर 6 बार click नहीं करते। और मौजूदा position पर ठीक-ठीक लौटने के लिए पहले से 8 बार click करना भी खास मतलब नहीं रखता
इस मामले में सोचने का तरीका ज़्यादा “click करो, इंतज़ार करो, फिर देखो कि जगह सही है या नहीं, फिर दोबारा click करो” जैसा होता है। इसके उलट, input को buffer करने वाला संवेदनशील button overshooting पैदा कर सकता है, जिसमें चीज़ आगे निकल जाती है और फिर बहुत पीछे लौट आती है। यह वैसा ही है जैसे list में मनचाही जगह तक scroll करने की कोशिश करते हुए बार-बार चूक जाना
iPhone का तरीका उन युवा लोगों या tech enthusiasts के लिए ज़्यादा ठीक है जो बिना रुके तेज़ी से काम करना चाहते हैं। यह वैसा ही है जैसे computer keyboard पर latency की वजह से पहला अक्षर screen पर दिखने से पहले ही कई अक्षर टाइप कर दिए जाएँ
मैंने पहले एक physical button वाला device इस्तेमाल किया था, जिसमें दबाने पर beep होती थी और समय में 30 सेकंड जुड़ते थे। लेकिन कभी beep सुनाई देती थी और 30 सेकंड नहीं जुड़ते थे, और कभी बिना आवाज़ के 30 सेकंड जुड़ जाते थे। इसलिए मुझे हमेशा धुंधले display को आँखें सिकोड़कर देखना पड़ता था कि यह सच में काम हुआ या नहीं
मुझे यह असामान्य रूप से खराब design लगा था, लेकिन उसके बाद मैंने अनगिनत बार pure software buttons में भी यही टूटा हुआ व्यवहार दोहराया हुआ देखा। screen पर button का रंग बदलना और माँगी गई action का सचमुच होना, इन दोनों का रिश्ता बहुत ढीला होता है। ऐसा क्यों है? आखिर इसे implement कैसे किया गया है?
आप imperative code लिखते हैं और दो commands देते हैं, और दोनों अपने-अपने तरीके से fail हो सकती हैं
इसे “हो गया” जैसा दिखाने के कई तरीके हैं
सबसे पहले, tests सब pass हो जाते हैं, इसलिए ज़्यादातर developers यहीं सोचना बंद कर सकते हैं
हो सकता है वे exceptions पकड़कर सिर्फ log छोड़ देना ही काफी समझें, लेकिन इससे चीज़ ठीक नहीं होती
यह भी हो सकता है कि वे इसे production में कुछ समय चलाकर देखें कि समस्या आती है या नहीं। आखिरकार जब समस्या आती भी है, तो developer दोबारा कोशिश करेगा, और दूसरी बार शायद यह काम कर जाए, तो वह फिर सोचना बंद कर सकता है
कुछ दिन पहले outbox pattern पर भी बड़ी चर्चा हुई थी। उसमें पहले काम को दो हिस्सों में बाँटकर atomically संभाला जाता है, और दूसरा काम consumer पर छोड़ दिया जाता है
मुझे लगता है कि वास्तविक दुनिया में यह समस्या बार-बार इसलिए दिखती है क्योंकि developers “ऐसा होता ही नहीं”, “मैंने इसे ठीक कर दिया”, और “इसे ठीक किया ही नहीं जा सकता” जैसी quantum superposition में रहते हैं
button का रंग बदलने वाला code “button” component का internal व्यवहार होता है, इसलिए इसे हर button में अलग से implement नहीं करना पड़ता। लेकिन इसका मतलब यह भी है कि यह असली action करने वाले code से कुछ हद तक अलग रहता है। अगर
on clickhandler में मूल पोस्ट की तरह कोई अंतिम जाँच हो, जैसे “rotation animation चल रही हो तो image को rotate न करो”, तो अक्सर button को यह बताने का तरीका ही नहीं होता कि रंग बदलना cancel कर दे। उल्टा, रंग बदलने वाली animation ठीक से न भी चले, तब भीon clickhandler चल सकता हैbutton आम तौर पर mouse button दबाते ही रंग बदल लेता है, लेकिन action mouse button छोड़ने पर होती है। यह तरीका जानबूझकर यह मौका देता है कि button दबाए रखते हुए उसे बाहर drag करके आख़िरी क्षण में cancel किया जा सके, और mobile पर interaction को click के बजाय scroll के रूप में दोबारा समझा जा सके। दूसरी स्थितियों में यह सिर्फ ऐसे मौकों की संख्या बढ़ाता है, जहाँ रंग तो बदल चुका होता है लेकिन action को बाद में रोका जाता है
यह इस बात से पूरी तरह स्वतंत्र है कि मौजूदा software state में वह press उपयोगी input है या नहीं। अच्छी तरह लिखा गया software तो पहले से जानता होता कि input नहीं लिया जा सकता और button को disabled कर देना चाहिए था, और ठीक-ठाक लिखा software भी action process हो रही है या cancel हो गई है, इसकी लगभग तुरंत feedback दे देना चाहिए
लोग अक्सर भूल जाते हैं कि animation पूरी तरह सहायक चीज़ है; animation खुद लक्ष्य नहीं है
animation का काम loading time को छिपाना और एक state से दूसरी state में सहज बदलाव कराना है। इसी कारण इसका इस्तेमाल किया जाता है
लगता है यह समझ कहीं खो गई, और अब ऐसा code बन गया है जिसमें animation खत्म होने तक इंतज़ार करना पड़ता है
यह cargo cult का एक और चौंकाने वाला उदाहरण है
सच कहूँ तो “छिपाना” शब्द से मैं सहमत नहीं हूँ। touchscreen पर बिना किसी संकेत के कुछ अचानक दिख जाना, कि वह क्यों आया, एक स्पष्ट anti-pattern है
पुराने Apple को समझ थी कि design सिर्फ चीज़ों को सुंदर बनाने से बढ़कर है। आज का काँच-जैसा Apple सिर्फ इस बात पर अटका है कि demo में वह कैसा दिखे
पहली तुलना देखते समय, सच कहूँ तो मुझे लगा समस्या iPhone वाले उदाहरण में ही है। हर बार rotate बटन दबाने पर इमेज के नीचे वाले बटन और slider गायब होकर फिर fade-in होते हैं, यह व्यवहार मैंने iOS के कई apps में देखा है और यह लगातार परेशान करता है। खासकर Screenshot app से मुझे व्यक्तिगत रूप से बड़ी शिकायत है
अगर कोई UX element interaction से पहले और बाद, दोनों समय इस्तेमाल किया जा सकता है, तो चाहे transformation हो या processing, उसे उस दौरान भी दिखाई देता रहना चाहिए। iPhone में rotate करते समय इन बटनों को छिपाने से UX में क्या फायदा होता है? यह बेहतर भी नहीं लगता। हाँ, हाल के Apple software ने अक्सर वास्तविक UX सुधारों को बाहरी रूप-रंग की वेदी पर बलि चढ़ाया है
लेकिन इस बात से मैं सहमत हूँ कि ऐसे tap को animation से स्वतंत्र रूप से handle किया जाना चाहिए
UX के लिए भी कुछ ऐसा बनाया जा सकता है। यानी design pattern constraints का ऐसा संग्रह, जो किसी जाने-पहचाने UX flaw वाली स्थिति में release करने की कोशिश पर warning दिखाए
इससे मुझे वह समय याद आ गया जब मैंने बच्चों के इस्तेमाल के लिए बनाया गया BabyButton implement किया था। सामान्य click action की जगह मैंने
touchdownevent इस्तेमाल किया था, ताकि बच्चा तुरंत देख सके कि कुछ हुआ है, और अगर वह बटन को बहुत देर तक दबाए रखे या दबाकर उंगली हिलाए, तब भी कोई समस्या न होक्या उस उम्र के लिए system बनाया जाना चाहिए, यह बिल्कुल अलग विषय है, लेकिन मुझे लगा कि यह user की ज़रूरतों के हिसाब से design करने की एक अच्छी चुनौती थी
वास्तविक दुनिया के 99% से अधिक बटन दबाते ही काम करते हैं। लेकिन GUI में अगर बटन ऐसे काम करे, तो वह अजीब लगेगा
लेखक जो कहना चाह रहा है, उसके अधिक करीब असली लेख यह है: https://aresluna.org/show-your-hands-honor/
कॉल के दौरान iPhone का screen on/off बटन दबाने पर कभी कॉल कट जाती है, और कभी सिर्फ स्क्रीन बंद होती है — ऐसा क्यों होता है?
मुझे अब तक इसका pattern समझ नहीं आया, लेकिन iPhone को जेब में रखने से पहले वह बटन दबाकर मैंने कभी-कभी गलती से कॉल काट दी है
Lobste.rs की टिप्पणियाँ
हल्का-सा तंज है, लेकिन अगर अच्छे UI/UX की बात करें तो बिना controls और बिना संकेत वाला video embed सबसे खराब है
कई लोग autoplay को default रूप से बंद रखते हैं, और मैं भी लगभग एक जैसी दो images देखते हुए काफी देर तक “तो फर्क क्या है?” सोचता रहा
“animation खत्म होने तक user को कभी wait न कराओ” से मैं पूरी तरह सहमत हूँ
अगर app है, तो सुंदर दिखने से ज्यादा user command को हमेशा priority मिलनी चाहिए
मुझे लगता है यह principle games पर भी लागू होता है। कुछ games में menu खोलने के बाद input register होने तक बहुत छोटी delay होती है
अगर किसी game में flashy menu animation हो और आप pause और down arrow जल्दी-जल्दी दबाएँ, तो menu खुलने के बाद दूसरा item selected होना चाहिए या नहीं—यही समस्या है
games में input buffering सूक्ष्म विषय है, लेकिन menu operation में आम तौर पर यह खराब महसूस होने के cases कम ही होते हैं
video information convey करने का तरीका अच्छा नहीं था। button को लगातार कई बार दबाए जाने का moment notice करने के लिए ध्यान से देखना पड़ता था
असली मुद्दे पर आएँ तो, यह भी अस्पष्ट है कि Android phone सच में गलत कर रहा है या नहीं। जल्दी-जल्दी 8 बार दबाकर desired result पाना चाहने की frustration समझ में आती है, लेकिन desktop OS में accidental double-click detection याद आता है
आखिरकार यह manufacturer की usability की सोच और user को महसूस होने वाली convenience के फर्क जैसा लगता है। अगर तुलना करनी ही हो, तो iPhone का animation के दौरान भी “Done” button दिखाना मुझे ज्यादा distracting लगता है
यह कहना मुश्किल है कि Android पूरी तरह गलत है। धीमे respond करने वाले UI की वजह से मैंने कोई action गलती से दो बार execute किया है
शायद सबसे अच्छा तरीका यह हो सकता है कि animation खत्म होने तक button disable रखा जाए
“तीन clicks” काम नहीं करता, और animation के दौरान extra clicks ignore हो जाते हैं। click करना, screen देखते हुए animation खत्म होने का wait करना, फिर click करना और फिर wait करना—यह process धीमा है और user का काफी ध्यान मांगता है
बेहतर solution शायद UI में immediate feedback देना है। button state को तुरंत render किया जा सकता है कि click process हो गया है, या slow full animation आने से पहले temporary रूप से screen को जल्दी redraw करके current progress दिखाया जा सकता है
पूरे लेख से जोरदार सहमति है। मैं इसे ऐसे कहना चाहूँगा कि animation ने Hippocratic oath तोड़ी है
animation का पहला principle “पहले नुकसान मत पहुँचाओ”, यानी “पहले user input में बाधा मत डालो” होना चाहिए
क्या कभी ऐसा rotary encoder इस्तेमाल किया है जो follow नहीं कर पाता? मेरे headphone amp का volume knob बहुत तेजी से घुमाओ तो कुछ भी नहीं होता
अगर मैं एक दिन के लिए President बनूँ तो…
ऐसी चीजें देखते समय मैं हमेशा सोचता हूँ कि मेरे GUI toolkit में यह कैसे होगा। मेरा toolkit Windows platform से उधार लिए behavior की तरह दो तेज clicks को double-click मानता है, और यह कभी-कभी पागल कर देता है
double-click अपने-आप में आम convention है और click से अलग इसकी value है। ideally click events को idempotent बनाना चाहिए ताकि दो बार होने पर भी problem न हो। जैसे अगर click item selection है और double-click default action execute करना है, तो same item को दो बार select करना हानिकारक नहीं है। लेकिन reality हमेशा ऐसी नहीं होती
problem यह है कि button को बहुत तेजी से click करने पर button सिर्फ एक बार execute हो सकता है, और उसके बाद वाला event double-click event में जाकर कुछ भी न करे। इसलिए fast press करने पर आधे clicks ignore होने जैसा behavior बन जाता है
इसी problem की वजह से मैंने
triggersOnMultiClickनाम का boolean बनाया, और इसेtrueset करने पर double-click जैसे तेज multi-click में भी trigger event emit होता है। हालांकि backward compatibility के कारण defaultfalseरखा था, लेकिन अब new major release का समय आ गया है, इसलिए लेख की दलील सही मानते हुए default को अबtrueमें बदलने का सोच रहा हूँ“2 जुलाई 2021 को जोड़ा गया, default
false। 5 जुलाई 2026 (v13.0) में default कोtrueमें बदल दिया गया ताकि buttons के सभी clicks default रूप से trigger हों। अगर पुराना behavior चाहिए तो double-click event override करें या parent constructor call के बादtriggersOnMultiClick = falseset करें” इस तरह लिखा जा सकता हैanimation implementation में भी similar behavior अनजाने में पैदा हो सकता है। अगर object के अंदर animation position variable हो और click पर value set की जाती हो, तो double-click होने पर मोटे तौर पर दो choices हैं। बाकी animation skip करके सीधे next internal state पर जाना, या visual smoothness बनाए रखने के लिए
if(animationCounter) return;की तरह event ignore करना। लेख के Android developer ने शायद दूसरा विकल्प चुनाApple side ने शायद तीसरा तरीका इस्तेमाल किया है, यानी pending animation queue रखकर events को उसमें डालना। curiosity यह है कि internal state queue में डालते समय बदलती है, completion पर बदलती है, या सच में image को animation से rotate किया जाता है। अगर बीच में animation interrupt करके save करें तो क्या 45-degree rotated image मिल सकती है? अगर मैं करता, तो EXIF को atomically 90 degrees update करता और transition animation अलग से चलाता
implementation simplicity, visual fidelity, और UI behavior के बीच कई reasonable choices हो सकती हैं। personally मुझे यह तरीका भी पसंद है कि second press animation का wait किए बिना तुरंत new state पर snap हो जाए। शायद मैं animation queue तक नहीं बनाऊँगा
लगभग इसी समय code बदलना मजेदार है। पिछला modification भी 2 जुलाई को था और यह संयोग से 5 जुलाई है। ऐसी history को documentation comments में सीधे लिख देना मुझे पसंद है। बाद में बदलाव करते समय यादों की तरह पढ़ना भी अच्छा लगता है
Apple शायद default animation queue provide करता होगा, लेकिन state change का timing फिर भी अलग issue है। web में शायद state को atomically update करके CSS
transformtransition जैसी purely visual animation अलग रखी जाएगी। layout recalculation भी avoid हो सकता है, इसलिए implementation आसान और efficient लगेगा। animation से faster class name बदलने पर jump होगा या queue होगा, यह बाद में experiment करके देखना चाहूँगाशायद उम्र बढ़ने की वजह से, गलती से दो बार tap करने पर ऐसे behavior से कई बार irritation हुई है
उसी जगह के button या double-tap को confirmation mechanism बनाना भयानक है। अगर सच में confirmation चाहिए तो accidental confirmation आसानी से हो सके ऐसा नहीं बनाना चाहिए
हालांकि इस example में fast repeated input accept करना अच्छा idea लगता है। दूसरी cases में ऐसा जरूरी नहीं। physical buttons में कुछ ऐसे होते हैं जो किसी चीज के “खत्म” होने तक intentionally second press रोकते हैं, और भले ही यह हमेशा conscious design न हो, कभी-कभी यह सही choice होती है
बहुत से लोगों को laggy devices या खराब devices इस्तेमाल करने पड़ते हैं, और अगर हाथ या उंगलियों में tremor जैसी health issues हों तो input limit करने में फायदा हो सकता है
यह example ऐसा case लगता है जहाँ दोनों sides ठीक मानी जा सकती हैं। ऐसे examples भी हैं जहाँ wait करना ज्यादा annoying है, और ऐसे examples भी निश्चित रूप से हैं जहाँ animation हो या कोई और condition, input limiting होना अच्छा लगता
mobile browser search results का मेरी उंगली के नीचे update होकर जिस option को मैं tap करने वाला था उसे दूसरी जगह धकेल देना सच में लगातार irritate करता है
मैंने खुद को ज्यादा wait करने के लिए train तो कर लिया है, लेकिन यह कोई sensible बात नहीं कि UI interaction उन background asynchronous tasks के प्रति sensitive हो जिनका completion time reception state की वजह से बदलता रहता है