मीडियम जैसा फ्लोटिंग एक्शन मेन्यू कैसे बनाएं
की लोकप्रियता अस्थायी कार्रवाई मेनू वृद्धि हुई है, खासकर जब से मध्यम.कॉम ने इस सुविधा को प्रचलन में लाया है। संक्षेप में, फ्लोटिंग एक्शन मेनू को फैशनवाला जब आप कुछ पाठ का चयन करें एक वेब पेज पर। मेनू चयन के पास दिखाई देता है, विभिन्न क्रियाओं को दिखा रहा है जो आपको चयनित पाठ को जल्दी से प्रारूपित, हाइलाइट या साझा करने की अनुमति देता है.
इस ट्यूटोरियल में, मैं आपको दिखाता हूँ कि कैसे प्रदर्शित किया जाए चयनित पाठ स्निपेट के लिए क्रिया मेनू एक वेब पेज पर। हमारा एक्शन मेनू उपयोगकर्ताओं को सक्षम करेगा चयनित पाठ को ट्वीट करें उनके अनुयायियों को.
1. HTML बनाएं
स्टार्टर HTML सरल है, हमें केवल जरूरत है कुछ पाठ उपयोगकर्ता का चयन कर सकते हैं। डेमो के लिए, मैं उपयोग करूँगा “द हार्ट एंड द हंटर” सोते समय की कहानी नमूना पाठ के रूप में.
द हार्ट एंड द हंटर
हार्ट एक बार था ...
...
2. एक्शन मेनू टेम्पलेट बनाएं
मैं हूँ HTML कोड जोड़ना कार्रवाई मेनू से संबंधित है अंदर एक तत्त्व. अंदर जो भी है
टैग, यह प्रदान नहीं किया जाएगा जब तक यह दस्तावेज़ में जोड़ा नहीं जाता तब तक ब्राउज़रों द्वारा जावास्क्रिप्ट का उपयोग कर.
किसी भी अनावश्यक स्थान को न छोड़ें के अंदर टैग, जैसा कि दस्तावेज़ में डालने के बाद कार्रवाई मेनू लेआउट को परेशान कर सकता है। अगर तुम चाहो, अधिक बटन जोड़ें के भीतर
#shareBox
अधिक विकल्पों के लिए.
3. सीएसएस बनाएं
के लिए सीएसएस #shareBox
इनलाइन कंटेनर इस तरह से जाता है:
# शेक्सबॉक्स चौड़ाई: 30 पीएक्स; ऊंचाई: 30 पीएक्स; स्थिति: निरपेक्ष;
स्थिति: पूर्ण;
शासन हम करेंगे हम जहां चाहें मेनू रखें पेज पर.
मैंने भी स्टाइल किया कार्रवाई बटन अंदर #shareBox
एक पृष्ठभूमि रंग और छवि और इसके साथ ::बाद
छद्म तत्व I नीचे तीर के लिए एक त्रिकोण जोड़ा.
#shareBox> बटन चौड़ाई: 100%; ऊंचाई: 100%; पृष्ठभूमि-रंग: # 292A2B; सीमा: कोई नहीं; सीमा-त्रिज्या: 2 पीएक्स; रूपरेखा: कोई नहीं; कर्सर: सूचक; पृष्ठभूमि-छवि: url ('share.png'); बैकग्राउंड-रिपीट: नो-रिपीट; पृष्ठभूमि-स्थिति: केंद्र; पृष्ठभूमि का आकार: 70%; #shareBox> बटन :: के बाद स्थिति: निरपेक्ष; कंटेंट: "; बॉर्डर-टॉप: 10px सॉलिड # 292A2B; बॉर्डर-लेफ्ट: 10px सॉलिड ट्रांसपेरेंट; बॉर्डर-राइट: 10px सॉलिड ट्रांसपेरेंट; लेफ्ट: 5px; टॉप: 30px;
4. जेएस के साथ ईवेंट हैंडलर जोड़ें
जावास्क्रिप्ट पर आगे बढ़ते हुए, हमें करने की आवश्यकता है ईवेंट हैंडलर जोड़ें के लिए माउस नीचे
तथा mouseup
घटनाओं को शुरुआत और अंत पर कब्जा पाठ चयन का.
आप इसके लिए शोध भी कर सकते हैं अन्य चयन कार्यक्रम जैसे कि selectstart
और उनका उपयोग करें बजाय माउस घटनाओं के (जो आदर्श होगा लेकिन अभी तक उनके ब्राउज़र का समर्थन बहुत अच्छा नहीं है).
भी एक संदर्भ जोड़ें को का उपयोग कर तत्व
querySelector ()
तरीका.
document.addEventListener ('मूसडाउन', ऑनमाउन्डाउन); document.addEventListener ('माउसअप', onMouseUp); var temp = document.querySelector ('# shareBoxTemplate'); समारोह onMouseDown () फ़ंक्शन onMouseUp ()
5. पिछले चयनों को साफ़ करें
में माउस नीचे
घटना, हम करेंगे कुछ सफाई करें, यानी किसी भी पिछले चयन और संबंधित कार्रवाई मेनू को साफ़ करें.
समारोह onMouseDown () document.getSelection ()। removeAllRanges (); var शेयरबॉक्स = document.querySelector ('# शेयरबॉक्स'); if (shareBox; == null) shareBox.remove ();
getSelection ()
विधि एक रिटर्न चयन
वस्तु पाठ की श्रेणियों का प्रतिनिधित्व करना वर्तमान में उपयोगकर्ता और द्वारा चयनित removeAllRange ()
तरीकासभी श्रेणियों को हटा देता है उसी से चयन
वस्तु, इस प्रकार किसी भी पिछले चयन को साफ़ करना.
6. एक्शन मेनू प्रदर्शित करें
यह के दौरान है mouseup
घटना, जब हम करेंगे पाठ चयन किए जाने पर पुष्टि करें और आगे की कार्रवाई करेंगे.
function onMouseUp () var sel = document.getSelection (), txt = sel.toString (); if (txt! == "") var range = sel.getRangeAt (0); if (range.startContainer.parentElement.parentElement.localName === "लेख" || range.startContainer.parentElement.localName === "लेख") लेख का कुछ पाठ चुना गया ||
चयनित पाठ स्ट्रिंग प्राप्त करें फोन करके तार()
की विधि चयन
वस्तु। यदि चयनित पाठ खाली नहीं है, तो आगे बढ़ें और पहली सीमा प्राप्त करें वहाँ से चयन
वस्तु.
रेंज है चयनित भाग दस्तावेज़ का। आमतौर पर, उपयोगकर्ता एक बना देंगे एकल चयन केवल, एकाधिक नहीं (ctrl / cmd कुंजी दबाकर), इसलिए केवल चयन के माध्यम से पहली श्रेणी की वस्तु (सूचकांक 0 पर) प्राप्त करें getRangeAt (0)
.
एक बार जब आप सीमा प्राप्त कर लेते हैं, तो देखें कि क्या चयन उस स्थान से शुरू हुआ है लेख के अंदर. startContainer
श्रेणी की संपत्ति DOM नोड लौटाती है जहां से चयन शुरू हुआ.
कभी-कभी (जब आप एक पैराग्राफ के भीतर का चयन करें), इसका मूल्य सिर्फ एक है पाठ नोड, किस स्थिति में मूल तत्व होगा और के माता पिता
तत्व होगा
(इस पोस्ट में नमूना कोड में).
दूसरी बार, जब आप चयन करते हैं कई पैराग्राफ में, startContainer
होगा और इसका मूल नोड होगा
. इसलिए दो तुलना क्षण में
अगर
उपरोक्त कोड में शर्त.
एक बार अगर
हालत गुजरती है, यह समय है कार्रवाई मेनू प्राप्त करें टेम्प्लेट से और इसे दस्तावेज़ में जोड़ें. नीचे कोड रखें दूसरे के अंदर अगर
बयान.
document.body.insertBefore (document.importNode (temp.content, true), temp);));
importNode ()
तरीका बाहरी दस्तावेज़ों से नोड्स लौटाता है (हमारे मामले में, नोड्स से )। जब इसे दूसरे पैरामीटर के साथ बुलाया जाता है (
सच
), आयातित तत्व / नोड होगा अपने बाल तत्वों के साथ आओ.
आप सम्मिलित कर सकते हैं #shareBox
दस्तावेज़ निकाय में कहीं भी, मैंने इसे टेम्पलेट एलिमेंट से पहले जोड़ा है.
7. एक्शन मेनू रखें
हम एक्शन मेनू रखना चाहते हैं ठीक ऊपर और चयनित क्षेत्र के मध्य में. ऐसा करने के लिए, आयत मान प्राप्त करें चयनित क्षेत्र का उपयोग करके getBoundingClientRect ()
वह विधि जो किसी तत्व का आकार और स्थिति लौटाती है.
फिर, अपडेट करें चोटी
तथा बाएं
के मान #shareBox
आयत मूल्यों के आधार पर. नए की गणना में चोटी
तथा बाएं
मूल्यों, मैं का उपयोग किया ES6 टेम्पलेट शाब्दिक.
var rect = range.getBoundingClientRect (); var शेयरबॉक्स = document.querySelector ('# शेयरबॉक्स'); shareBox.style.top = 'calc ($ rect.top px - 38px)'; shareBox.style.left = 'calc ($ rect.left px + calc ($ rect. उपलब्धता px / 2) - 30px)';
8. कार्यक्षमता जोड़ें
अब जब हमने चयनित पाठ के पास क्रिया मेनू जोड़ा है, तो चयनित पाठ बनाने का समय आ गया है मेनू विकल्प के लिए उपलब्ध है ताकि हम उस पर कुछ कार्रवाई कर सकें.
चयनित पाठ को असाइन करें a शेयर बटन की कस्टम संपत्ति बुलाया 'ShareTxt'
और जोड़ें a माउस नीचे
बटन के लिए घटना श्रोता.
var shareBtn = shareBox.querySelector ('बटन'); shareBtn ['shareTxt'] = txt; shareBtn.addEventListener ('मूसडाउन', onShareClick, true);
सच
का पैरामीटर addEventListener ()
रोकता है माउस नीचे
बुदबुदाई से घटना.
के अंदर onShareClick ()
ईवेंट हैंडलर, हम एक ट्वीट में चयनित पाठ डालें पहुँच कर shareTxt
बटन की संपत्ति.
function onShareClick () window.open ('https://twitter.com/intent/tweet?text=$ this.shareTxt'); this.remove (); document.getSelection ()। removeAllRanges ()
एक बार बटन पर क्लिक किया जाता है, यह वही करता है जो इसे करना चाहिए, फिर पृष्ठ से स्वयं को हटा दें। यह भी करेंगे कोई भी चयन साफ़ करें दस्तावेज़ में.
स्रोत कोड और डेमो
नीचे दिए गए कोडपेन डेमो में, आप कर सकते हैं परीक्षा एक्शन मेनू कैसे काम करता है। तुम भी पा सकते हो पूर्ण स्रोत कोड हमारे गितुब रेपो में.