@ ফন্ট-ফেস দিয়ে <ক্যানভাস> এ টেক্সট আঁকলে প্রথমবার কাজ হয় না


97

@ ফন্ট-ফেসের মাধ্যমে লোড হওয়া টাইপফেসের সাহায্যে আমি যখন ক্যানভাসে একটি পাঠ্য আঁকি, তখন পাঠ্যটি সঠিকভাবে প্রদর্শিত হয় না। এটি মোটেও দেখায় না (ক্রোম 13 এবং ফায়ারফক্স 5 এ), বা টাইপফেসটি ভুল (অপেরা 11)। এই ধরণের অপ্রত্যাশিত আচরণ কেবল টাইপফেসের সাথে প্রথম অঙ্কনে ঘটে। তারপরে সবকিছু ঠিকঠাক কাজ করে।

এটা কি স্ট্যান্ডার্ড আচরণ বা কিছু?

ধন্যবাদ.

পিএস: পরীক্ষার কেসটির উত্স কোডটি নীচে দেওয়া হল

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>@font-face and &lt;canvas&gt;</title>
        <style id="css">
@font-face {
    font-family: 'Press Start 2P';
    src: url('fonts/PressStart2P.ttf');
}
        </style>
        <style>
canvas, pre {
    border: 1px solid black;
    padding: 0 1em;
}
        </style>
    </head>
    <body>
        <h1>@font-face and &lt;canvas&gt;</h1>
        <p>
            Description: click the button several times, and you will see the problem.
            The first line won't show at all, or with a wrong typeface even if it does.
            <strong>If you have visited this page before, you may have to refresh (or reload) it.</strong>
        </p>
        <p>
            <button id="draw">#draw</button>
        </p>
        <p>
            <canvas width="250" height="250">
                Your browser does not support the CANVAS element.
                Try the latest Firefox, Google Chrome, Safari or Opera.
            </canvas>
        </p>
        <h2>@font-face</h2>
        <pre id="view-css"></pre>
        <h2>Script</h2>
        <pre id="view-script"></pre>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script id="script">
var x = 30,
    y = 10;

$('#draw').click(function () {
    var canvas = $('canvas')[0],
        ctx = canvas.getContext('2d');
    ctx.font = '12px "Press Start 2P"';
    ctx.fillStyle = '#000';
    ctx.fillText('Hello, world!', x, y += 20);
    ctx.fillRect(x - 20, y - 10, 10, 10);
});
        </script>
        <script>
$('#view-css').text($('#css').text());
$('#view-script').text($('#script').text());
        </script>
    </body>
</html>

4
ব্রাউজারগুলি পটভূমিতে ফন্টটি ভারসাম্যহীনভাবে লোড করে। এটি স্বাভাবিক আচরণ। এছাড়াও পলিরিশ.com
টমাস

উত্তর:


74

ক্যানভাসে আঁকতে ঘটতে হবে এবং আপনি যখন fillTextপদ্ধতিটি কল করবেন তখনই ফিরে আসতে হবে । তবে ব্রাউজারটি এখনও নেটওয়ার্ক থেকে ফন্টটি লোড করতে পারেনি, এটি একটি পটভূমি কাজ। এটা সুতরাং এটি ফন্ট ফিরে আসবে হয়েছে করেন উপলব্ধ রয়েছে।

আপনি যদি ফন্টটি উপলব্ধ রয়েছে তা নিশ্চিত করতে চান তবে পৃষ্ঠায় এটির আগে কিছু লোড করুন, যেমন:

<div style="font-family: PressStart;">.</div>

4
আপনি যুক্ত করতে প্রলুব্ধ হতে পারেন display: none, কিন্তু এর ফলে ব্রাউজারগুলি ফন্টটি লোড করা এড়াতে পারে। এটির পরিবর্তে একটি স্থান ব্যবহার করা ভাল .
টমাস

6
স্পেস ব্যবহারের ফলে আইই হোয়াইটস্পেস নোডটি ডিভের মধ্যে থাকা উচিত যা ফন্টে রেন্ডার করার জন্য কোনও পাঠ্য রেখে না দেয়। অবশ্যই আইই এখনও ক্যানভাস সমর্থন করে না, তাই ভবিষ্যতে-আইআই এটি চালিয়ে যাবে কিনা এবং এটি ফন্ট লোডিং আচরণে প্রভাব ফেলবে কিনা তা জানা যায় না, তবে এটি দীর্ঘদিনের আইটি এইচটিএমএল-পার্সিংয়ের সমস্যা।
ববিনস

4
ফন্টটি প্রিললোড করার সহজ কোনও উপায় নেই? যেমন কোনওভাবে জাভাস্ক্রিপ্টের মাধ্যমে জোর করবেন?
জোশুয়া

@ জোশুয়া: কেবলমাত্র পৃষ্ঠায় একটি উপাদান তৈরি করে এবং এটিতে ফন্ট সেট করে। উপরের মত একই বিষয়বস্তু তৈরি করছে কিন্তু গতিশীল।
ববিনস

17
এটি যুক্ত করা গ্যারান্টি দেয় না যে জাভাস্ক্রিপ্ট কার্যকর হয়ে গেলে ফন্টটি ইতিমধ্যে লোড হবে। আমাকে প্রশ্নবিদ্ধ দেরিতে (সেটটাইমআউট) ফন্টটি ব্যবহার করে আমার স্ক্রিপ্টটি কার্যকর করতে হয়েছিল যা অবশ্যই খারাপ।
নিক

23

এই কৌশলটি ব্যবহার করুন এবং একটি onerrorইভেন্টকে একটি Imageউপাদানকে আবদ্ধ করুন ।

ডেমো এখানে : সর্বশেষতম ক্রোমে কাজ করে।

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = 'http://fonts.googleapis.com/css?family=Vast+Shadow';
document.getElementsByTagName('head')[0].appendChild(link);

// Trick from /programming/2635814/
var image = new Image();
image.src = link.href;
image.onerror = function() {
    ctx.font = '50px "Vast Shadow"';
    ctx.textBaseline = 'top';
    ctx.fillText('Hello!', 20, 10);
};

4
স্মার্ট ট্রিক নোট করুন যে আপনি সিএসএস লোড করছেন যার পরিবর্তে আসল ফন্ট ফাইলের একটি রেফারেন্স রয়েছে (যেমন, .ttf, .woff, ইত্যাদি)। আমাকে আপনার ট্রিক্সটি দুবার ব্যবহার করতে হয়েছিল, একবার সিএসএস ফাইলের জন্য, এবং একবার রেফারেন্সড ফন্ট ফাইল (.ওফফ) করার জন্য যাতে সবকিছু লোড হয়েছিল কিনা তা নিশ্চিত করতে।
ম্যাগমা

4
.Ttf ফন্টের সাহায্যে এই পদ্ধতির চেষ্টা করে - ক্রোমে স্টাইলের সাথে কাজ করা হয় না (41.0.2272.101 মি)। এমনকি 5 সেকেন্ডে সেটটাইমআউটও সহায়তা করে না - প্রথম রেন্ডারটি ডিফল্ট ফন্টের সাথে যায়।
মিখাইল ফিয়াদোসেনকা

4
আপনি এসআরসি
সেট্জডিয়াসফিজড

4
এছাড়াও "নতুন চিত্র;" অনুষঙ্গগুলি অনুপস্থিত।
এসডিজফিয়াসড

@ এসডজেফিয়াসড প্যারেনগুলি প্রয়োজন হয় না এবং srcএ্যাট্রিবিউট সেট করা সত্ত্বেও পরবর্তী এক্সিকিউশন ব্লকে লোড শুরু হবে।
একটি বেতনভুক্ত অহংকার

16

সমস্যার কেন্দ্রবিন্দু হ'ল আপনি ফন্টটি ব্যবহারের চেষ্টা করছেন তবে ব্রাউজারটি এখনও এটি লোড করেনি এবং সম্ভবত এটির জন্য অনুরোধও করেনি। আপনার যা প্রয়োজন তা হ'ল এটি ফন্টটি লোড করবে এবং এটি লোড হয়ে গেলে আপনাকে একটি কলব্যাক দেবে; একবার আপনি কলব্যাক পেয়ে গেলে, আপনি জানেন যে ফন্টটি ব্যবহার করা ঠিক আছে।

গুগলের ওয়েবফন্ট লোডারটি দেখুন ; এটি "কাস্টম" সরবরাহকারীর মতো মনে activeহয় এবং বোঝার পরে কলব্যাকটি এটি কাজ করে।

আমি এটি আগে কখনও ব্যবহার করি নি, তবে ডক্সের দ্রুত স্ক্যান থেকে আপনার সিএসএস ফাইল তৈরি করতে হবে fonts/pressstart2p.css:

@font-face {
  font-family: 'Press Start 2P';
  font-style: normal;
  font-weight: normal;
  src: local('Press Start 2P'), url('http://lemon-factory.net/reproduce/fonts/Press Start 2P.ttf') format('ttf');
}

তারপরে নিম্নলিখিত জেএস যুক্ত করুন:

  WebFontConfig = {
    custom: { families: ['Press Start 2P'],
              urls: [ 'http://lemon-factory.net/reproduce/fonts/pressstart2p.css']},
    active: function() {
      /* code to execute once all font families are loaded */
      console.log(" I sure hope my font is loaded now. ");
    }
  };
  (function() {
    var wf = document.createElement('script');
    wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
        '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
    wf.type = 'text/javascript';
    wf.async = 'true';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(wf, s);
  })();

14

আপনি ফন্টফ্রেস এপিআই এর সাহায্যে ফন্টগুলি ক্যানভাসে ব্যবহারের আগে লোড করতে পারেন :

const myFont = new FontFace('My Font', 'url(https://myfont.woff2)');

myFont.load().then((font) => {
  document.fonts.add(font);

  console.log('Font loaded');
});

হরফ সংস্থান myfont.woff2প্রথমে ডাউনলোড করা হয়। ডাউনলোড শেষ হয়ে গেলে ডকুমেন্টের ফন্টফ্রেসেটে ফন্টটি যুক্ত করা হয় ।

ফন্টফ্রিজ এপিআই এর স্পেসিফিকেশন হ'ল এই লেখার সময় একটি কার্যকরী খসড়া। ব্রাউজারের সামঞ্জস্যতা টেবিলটি এখানে দেখুন।


4
তোমাকে মিস করছি document.fonts.add। ব্রুনোর উত্তর দেখুন।
পেসারিয়ার

ধন্যবাদ @ পেসারিয়ার! আমার উত্তর আপডেট।
ফ্রেড বার্গম্যান

এই প্রযুক্তিটি পরীক্ষামূলক এবং বেশিরভাগ ব্রাউজার দ্বারা সমর্থিত নয়।
মাইকেল জেলেনস্কি

11

এই জাতীয় ফন্ট ব্যবহার করে একটি ডিভ লুকানোর জন্য সাধারণ সিএসএস ব্যবহার সম্পর্কে কী:

সিএসএস:

#preloadfont {
  font-family: YourFont;
  opacity:0;
  height:0;
  width:0;
  display:inline-block;
}

এইচটিএমএল:

<body>
   <div id="preloadfont">.</div>
   <canvas id="yourcanvas"></canvas>
   ...
</body>


3

সম্প্রতি এটির সাথে খেলতে গিয়ে আমি সমস্যাটিতে জড়িয়ে পড়েছি pe

এটি সিএসএসে সরাসরি ক্যানভাসে ফন্ট-পরিবার যুক্ত করে এর চারপাশে কাজ করেছিল, যাতে আপনি কেবল যুক্ত করতে পারেন

ক্যানভাস {ফন্ট-পরিবার: প্রেস স্টার্ট; }


4
দেখে মনে হচ্ছে না: ক্রোম 12-এ পরীক্ষা করা হয়েছে সম্পাদনা করুন: ফন্টটি মিস করার জন্য কয়েকবার রিফ্রেশ করুন
রায়ান বদৌর

1

এটি আপনাকে সাহায্য করবে কিনা তা আমি নিশ্চিত নই, তবে আমার কোড দিয়ে সমস্যাটি সমাধান করার জন্য আমি আমার জাভাস্ক্রিপ্টের শীর্ষে একটি লুপ তৈরি করেছি যা আমি লোড করতে চাইলে সমস্ত ফন্টের মধ্য দিয়ে চলে ran তারপরে আমি ক্যানভাসটি সাফ করতে এবং ক্যানভাসে আমার পছন্দসই আইটেমগুলি প্রিলোড করতে একটি ফাংশন চালিয়েছিলাম। এখনও অবধি এটি নিখুঁতভাবে কাজ করেছে। এটি আমার যুক্তিটি ছিল আমি নীচে আমার কোড পোস্ট করেছি:

var fontLibrary = ["Acme","Aladin","Amarante","Belgrano","CantoraOne","Capriola","CevicheOne","Chango","ChelaOne","CherryCreamSoda",
"ConcertOne","Condiment","Damion","Devonshire","FugazOne","GermaniaOne","GorditasBold","GorditasRegular",
"KaushanScript","LeckerliOne","Lemon","LilitaOne","LuckiestGuy","Molle","MrDafoe","MrsSheppards",
"Norican","OriginalSurfer","OswaldBold","OswaldLight","OswaldRegular","Pacifico","Paprika","Playball",
"Quando","Ranchers","SansitaOne","SpicyRice","TitanOne","Yellowtail","Yesteryear"];

    for (var i=0; i < fontLibrary.length; i++) {
        context.fillText("Sample",250,50);
        context.font="34px " + fontLibrary[i];
    }

    changefontType();

    function changefontType() {
        selfonttype = $("#selfontype").val();
        inputtextgo1();
    }

    function inputtextgo1() {
        var y = 50;
        var lineHeight = 36;
        area1text = document.getElementById("bag1areatext").value;
        context.clearRect(0, 0, 500, 95)
        context.drawImage(section1backgroundimage, 0, 0);
        context.font="34px " + selfonttype;
        context.fillStyle = seltextcolor;
        context.fillText(area1text, 250, y);
    }

আমার উত্তরটি চিত্রিত করার জন্য আমি উপরে কিছু কোড যুক্ত করেছি। অন্য একটি ওয়েবপৃষ্ঠা বিকাশ করার সময় আমারও একই সমস্যা ছিল এবং এটি সার্ভারের শেষে এটি সমাধান করে এটি সমস্ত ফন্ট লোড করে দেয় ফলে ওয়েবপৃষ্ঠায় তাদের সঠিকভাবে প্রদর্শন করতে দেয়।
grapien

1

আমি বেশিরভাগ প্রস্তাবিত সংশোধনগুলি এখানে অন্তর্ভুক্ত করে একটি জিসফিল লিখেছি তবে কেউই সমস্যার সমাধান করেনি। তবে আমি একজন শিক্ষানবিশ প্রোগ্রামার তাই সম্ভবত প্রস্তাবিত সংশোধনগুলি সঠিকভাবে কোড করে নি:

http://jsfiddle.net/HatHead/GcxQ9/23/

এইচটিএমএল:

<!-- you need to empty your browser cache and do a hard reload EVERYTIME to test this otherwise it will appear to working when, in fact, it isn't -->

<h1>Title Font</h1>

<p>Paragraph font...</p>
<canvas id="myCanvas" width="740" height="400"></canvas>

সিএসএস:

@import url(http://fonts.googleapis.com/css?family=Architects+Daughter);
 @import url(http://fonts.googleapis.com/css?family=Rock+Salt);
 canvas {
    font-family:'Rock Salt', 'Architects Daughter'
}
.wf-loading p {
    font-family: serif
}
.wf-inactive p {
    font-family: serif
}
.wf-active p {
    font-family:'Architects Daughter', serif;
    font-size: 24px;
    font-weight: bold;
}
.wf-loading h1 {
    font-family: serif;
    font-weight: 400;
    font-size: 42px
}
.wf-inactive h1 {
    font-family: serif;
    font-weight: 400;
    font-size: 42px
}
.wf-active h1 {
    font-family:'Rock Salt', serif;
    font-weight: 400;
    font-size: 42px;
}

জেএস:

// do the Google Font Loader stuff....
WebFontConfig = {
    google: {
        families: ['Architects Daughter', 'Rock Salt']
    }
};
(function () {
    var wf = document.createElement('script');
    wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
        '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
    wf.type = 'text/javascript';
    wf.async = 'true';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(wf, s);
})();

//play with the milliseconds delay to find the threshold - don't forget to empty your browser cache and do a hard reload!
setTimeout(WriteCanvasText, 0);

function WriteCanvasText() {
    // write some text to the canvas
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    context.font = "normal" + " " + "normal" + " " + "bold" + " " + "42px" + " " + "Rock Salt";
    context.fillStyle = "#d50";
    context.fillText("Canvas Title", 5, 100);
    context.font = "normal" + " " + "normal" + " " + "bold" + " " + "24px" + " " + "Architects Daughter";
    context.fillText("Here is some text on the canvas...", 5, 180);
}

কর্মক্ষেত্র আমি শেষ পর্যন্ত দিয়েছিলাম এবং প্রথম লোডে, টেক্সটটির একটি চিত্র ব্যবহার করেছি এবং ক্যানভাস প্রদর্শন ক্ষেত্রের বাইরে ফন্ট-মুখগুলি সহ পাঠ্যকে অবস্থান দেওয়ার সময়। ক্যানভাস ডিসপ্লে এরিয়ায় ফন্ট-ফেসগুলির পরবর্তী সমস্ত প্রদর্শন কোনও সমস্যা হয়নি। এটি কোনও উপায়ে মার্জিত কাজ নয়।

সমাধানটি আমার ওয়েবসাইটটিতে বেক করা হয়েছে তবে কারও যদি প্রয়োজন হয় তবে আমি একটি jsfiddle তৈরি করার চেষ্টা করব।


1

কিছু ব্রাউজার সিএসএস ফন্ট লোডিং স্পেসিফিকেশন সমর্থন করে । এটি যখন সমস্ত ফন্ট লোড হয়ে যায় তখন আপনাকে কলব্যাক রেজিস্টার করতে দেয়। আপনি ততক্ষণ পর্যন্ত আপনার ক্যানভাসটি আঁকতে (বা কমপক্ষে আপনার ক্যানভাসে পাঠ্য অঙ্কন করতে) বিলম্ব করতে পারেন এবং ফন্টটি উপলভ্য হয়ে গেলে একটি পুনরায় আঁকতে ট্রিগার করতে পারেন।


1

এই নিবন্ধটি অলস লোডযুক্ত ফন্টগুলি প্রদর্শিত হচ্ছে না তা দিয়ে আমার সমস্যাগুলি সাজিয়েছে।

পারফরম্যান্স সমস্যাগুলি এড়াতে এবং পৃষ্ঠা লোডিং গতি বাড়ানোর জন্য কীভাবে ওয়েব ফন্টগুলি লোড করবেন

এটি আমাকে সহায়তা করেছে ...

    <link rel="preload" as="font" href="assets/fonts/Maki2/fontmaki2.css" rel="stylesheet" crossorigin="anonymous">

0

প্রথমে গুগলের ওয়েব ফন্ট লোডারটি অন্য উত্তরে যেমন পরামর্শ দেওয়া হয়েছিল তেমন ব্যবহার করুন এবং ফন্টগুলি লোড হয়েছে তা নির্দেশ করার জন্য আপনার ড্রয়িং কোডটি কলব্যাকে যুক্ত করুন। তবে এটি গল্পের শেষ নয়। এই দিক থেকে এটি খুব ব্রাউজার নির্ভর। বেশিরভাগ সময় এটি ঠিকঠাক কাজ করবে তবে কখনও কখনও এটি কয়েকশ মিলি সেকেন্ডের জন্য অপেক্ষা করতে বা পৃষ্ঠায় অন্য কোথাও হরফ ব্যবহার করতে হতে পারে। আমি বিভিন্ন বিকল্পের চেষ্টা করেছি এবং আফিক সর্বদা যে একটি পদ্ধতি কাজ করে তা হ'ল আপনি যে ফন্টটি ব্যবহার করতে চলেছেন তা ফন্ট পরিবার এবং ফন্ট আকারের সংমিশ্রণ সহ ক্যানভাসে কিছু পরীক্ষা বার্তা আঁকুন। আপনি এটি ব্যাকগ্রাউন্ডের মতো একই রঙের সাথে করতে পারেন, যাতে এগুলি এমনকি দৃশ্যমান হয় না এবং এটি খুব দ্রুত ঘটে। এর পরে ফন্টগুলি সর্বদা আমার জন্য এবং সমস্ত ব্রাউজারে কাজ করে।


0

আমার উত্তরটি @ ফন্ট-ফেসের চেয়ে গুগল ওয়েব ফন্টগুলিকে সম্বোধন করে। ফন্ট ক্যানভাসে প্রদর্শিত না হচ্ছে তার সমস্যার সমাধানের জন্য আমি সর্বত্র অনুসন্ধান করেছি। আমি টাইমার, সেটআইন্টারওয়াল, ফন্ট-বিলম্ব গ্রন্থাগার এবং সমস্ত ধরণের কৌশল চেষ্টা করেছিলাম। কিছুই কাজ হয়নি। (ক্যানভাসের জন্য সিএসএসে বা ক্যানভাস উপাদানটির আইডিতে ফন্ট-পরিবার স্থাপন সহ))

তবে, আমি দেখতে পেয়েছি যে গুগল ফন্টে রেকর্ড করা অ্যানিমেটিং পাঠ্য সহজেই কাজ করে। পার্থক্য কি? ক্যানভাস অ্যানিমেশনে, আমরা অ্যানিমেটেড আইটেমগুলি বারবার আঁকি। সুতরাং আমি টেক্সটটি দুবার রেন্ডার করার ধারণা পেয়েছি।

এটি কোনও কাজ করে না - যতক্ষণ না আমি সংক্ষিপ্ত (100 মিমি) টাইমার বিলম্ব যোগ করেছি। আমি এখনও পর্যন্ত একটি ম্যাক পরীক্ষা করেছি। ক্রোম 100 মি। সাফারির জন্য একটি পৃষ্ঠা পুনরায় লোড প্রয়োজন, তাই আমি টাইমারটি বাড়িয়ে 1000 করেছিলাম, এবং তখন এটি ঠিক ছিল। ফায়ারফক্স 18.0.2 এবং 20.0 ক্যানভাসে কিছু লোড করবে না যদি আমি গুগল ফন্ট (অ্যানিমেশন সংস্করণ সহ) ব্যবহার করি।

সম্পূর্ণ কোড: http://www.macloo.com / উদাহরণস / স্ক্যানওয়াস / স্ক্যানভাস 10.html

http://www.macloo.com / উদাহরণ / স্ক্যানওয়াস / স্ক্রিপ্টস / স্ক্যানভাস 10.js


0

একই সমস্যার মুখোমুখি। "বোবিনস" এবং অন্যদের মন্তব্যগুলি পড়ার পরে, আমি এটি অনুসরণ করে নিম্নলিখিত জাভাস্ক্রিপ্ট ব্যবহার করি:

$('body').append("<div id='loadfont' style='font-family: myfont;'>.</div>");
$('#loadfont').remove();

0

আপনি যদি প্রতিটি সময় নতুন করে ফন্ট লোড করতে চান (এবং সম্ভবত রেন্ডারিং পরিবর্তন করতে পারেন) হ'ল ফন্ট লোডিং এপিআই এর জন্যও একটি দুর্দান্ত ইভেন্ট রয়েছে । আমি একটি সম্পূর্ণ গতিশীল পরিবেশে প্রতিশ্রুতি সঙ্গে সমস্যা ছিল।

var fontFaceSet = document.fonts;
if (fontFaceSet && fontFaceSet.addEventListener) {
    fontFaceSet.addEventListener('loadingdone', function () {
        // Redraw something

    });
} else {
    // no fallback is possible without this API as a font files download can be triggered
    // at any time when a new glyph is rendered on screen
}

0

ক্যানভাসটি ডিওএম লোডিংয়ের স্বাধীনভাবে আঁকা। প্রিলোড কৌশলটি কেবল তখনই কাজ করবে যদি প্রিললোডের পরে ক্যানভাস আঁকানো হয়।

আমার সমাধান, এটি সর্বোত্তম না হলেও:

সিএসএস:

.preloadFont {
    font-family: 'Audiowide', Impact, Charcoal, sans-serif, cursive;
    font-size: 0;
    position: absolute;
    visibility: hidden;
}

এইচটিএমএল:

<body onload="init()">
  <div class="preloadFont">.</div>
  <canvas id="yourCanvas"></canvas>
</body>

জাভাস্ক্রিপ্ট:

function init() {
    myCanvas.draw();
}

0

আমি সমস্যাটি সমাধানের জন্য ফন্টফ্রেসসেটলোডটি ব্যবহার করার চেষ্টা করছি: https://jsfiddle.net/wengshenshun/gr1zkvtq/30

const prepareFontLoad = (fontList) => Promise.all(fontList.map(font => document.fonts.load(font)))

আপনি https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet/load থেকে ব্রাউজারের সামঞ্জস্যতা পেতে পারেন


-4

নীচে হিসাবে একটি বিলম্ব যোগ করুন

<script>
var c = document.getElementById('myCanvas');    
var ctx = c.getContext('2d');
setTimeout(function() {
    ctx.font = "24px 'Proxy6'"; // uninstalled @fontface font style 
    ctx.textBaseline = 'top';
    ctx.fillText('What!', 20, 10);      
}, 100); 
</script>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.