मैं अधिक सामान्य सवाल का जवाब दूंगा कि विंडो आकार के अनुसार कैनवस को गतिशील रूप से कैसे अनुकूलित किया जाए। स्वीकृत उत्तर उचित रूप से उस मामले को संभालता है जहां चौड़ाई और ऊंचाई दोनों को 100% माना जाता है, जो कि पूछा गया था, लेकिन जो कैनवास के पहलू अनुपात को भी बदल देगा। कई उपयोगकर्ता चाहेंगे कि विंडो पर आकार बदलने के लिए कैनवास का आकार बदल जाए, लेकिन पहलू अनुपात को अछूता रखते हुए। यह सटीक सवाल नहीं है, लेकिन यह "फिट बैठता है", बस सवाल को थोड़ा और सामान्य संदर्भ में लाना है।
खिड़की में कुछ पहलू अनुपात (चौड़ाई / ऊंचाई) होगा, और इसलिए कैनवास ऑब्जेक्ट होगा। आप कैसे इन दो पहलू अनुपातों को एक-दूसरे से संबंधित करना चाहते हैं, एक बात है जिसके बारे में आपको स्पष्ट होना होगा, उस प्रश्न का कोई "एक आकार सभी फिट बैठता है" नहीं है - मैं कुछ सामान्य मामलों से गुजरता हूं जो आप कर सकते हैं चाहते हैं।
सबसे महत्वपूर्ण बात जो आपको स्पष्ट होनी चाहिए: html कैनवास ऑब्जेक्ट में एक चौड़ाई विशेषता और एक ऊंचाई विशेषता है; और फिर, उसी वस्तु के सीएसएस में एक चौड़ाई और एक ऊंचाई विशेषता भी होती है। वे दो चौड़ाई और ऊंचाई अलग-अलग हैं, दोनों अलग-अलग चीजों के लिए उपयोगी हैं।
चौड़ाई और ऊंचाई विशेषताओं को बदलना एक ऐसी विधि है जिसके साथ आप हमेशा अपने कैनवास के आकार को बदल सकते हैं, लेकिन फिर आपको सब कुछ फिर से करना होगा, जिसमें समय लगेगा और हमेशा आवश्यक नहीं है, क्योंकि आकार परिवर्तन की कुछ मात्रा आप पूरा कर सकते हैं सीएसएस विशेषताओं के माध्यम से, जिस स्थिति में आप कैनवास को फिर से नहीं बनाते हैं।
मुझे लगता है कि आप खिड़की के आकार (जो एक पूर्ण स्क्रीन कैनवास के साथ शुरू हो रहा है) पर 4 मामले देख सकते हैं
1: आप चाहते हैं कि चौड़ाई 100% बनी रहे, और आप चाहते हैं कि पहलू अनुपात वैसा ही रहे जैसा वह था। उस स्थिति में, आपको कैनवास को फिर से बनाने की आवश्यकता नहीं है; आपको हैंडलर को आकार देने वाली विंडो की भी आवश्यकता नहीं है। जो तुम्हे चाहिए वो है
$(ctx.canvas).css("width", "100%");
जहाँ cxx आपके कैनवास संदर्भ है। फिडेल : रिसाइजबीड्थ
2: आप चाहते हैं कि चौड़ाई और ऊँचाई दोनों 100% रहें, और आप स्ट्रेच-आउट छवि के प्रभाव के पहलू पहलू में परिणाम चाहते हैं। अब, आपको अभी भी कैनवास को फिर से बनाने की आवश्यकता नहीं है, लेकिन आपको हैंडलर का आकार बदलने के लिए एक विंडो की आवश्यकता है। हैंडलर में, आप करते हैं
$(ctx.canvas).css("height", window.innerHeight);
फिडल: मेसविथस्पेक्ट्रियो
3: आप चाहते हैं कि चौड़ाई और ऊंचाई दोनों 100% रहें, लेकिन पहलू अनुपात में बदलाव का जवाब छवि को खींचने से कुछ अलग है। फिर आपको फिर से तैयार करने की आवश्यकता है, और इसे उस तरीके से करें जो कि स्वीकृत उत्तर में उल्लिखित है।
फ़ेडल: रेडव
4: आप चाहते हैं कि पृष्ठ लोड पर चौड़ाई और ऊँचाई 100% हो, लेकिन उसके बाद लगातार बने रहें (विंडो आकार में कोई प्रतिक्रिया नहीं)।
बेला: तय
सभी फ़िडल्स में समान कोड होता है, केवल पंक्ति 63 के अलावा जहां मोड सेट होता है। आप अपने स्थानीय मशीन पर चलने के लिए फिडल कोड को भी कॉपी कर सकते हैं, जिस स्थिति में आप क्वेरिस्ट तर्क के माध्यम से मोड का चयन कर सकते हैं, जैसा कि? मोड = redraw?