Даването на височина на обекта на изображението с помощта на javascript не работи

Опитвам се да дам височина на обект на изображение с помощта на javascript, но не работи.

html код

 <canvas id="canvas1" height="500px" width="500px">

 </canvas>

Искам да създам фоново изображение с помощта на javascript и това изображение трябва да бъде зададено според размера на платното.

Код на JavaScript:

canvas = document.getElementById("canvas1");
c = canvas.getContext("2d");
var bg = new Image();
bg.src = "images/bg.png";
bg.height = "100";
bg.width = "100";
c.drawImage(bg,0,0);

Виждам изображението, но не мога да дам височината и ширината на това изображение по време на изпълнение.
Как мога да дам височината и ширината на обекта на изображението по време на изпълнение.?
Благодаря ви предварително за помощта.


person Rikin Thakkar    schedule 07.02.2014    source източник


Отговори (2)


Има няколко проблема в кода:

Брой 1

Първият е атрибутите на етикета. Всъщност не влияе на резултата, но правилният синтаксис е цяло число без px в края, тъй като ширината и височината за платно могат да използват само пиксели:

<canvas id="canvas1" height="500" width="500"></canvas>

Брой 2

Следващият проблем е, че се опитвате да зададете свойства само за четене на елемента на изображението:

var bg = new Image();
bg.src = "images/bg.png";
//bg.height = "100";      invalid
//bg.width = "100";       invalid

Всъщност не е необходимо да задавате размера на изображението; вие можете, ако абсолютно искате, като използвате този синтаксис (след това вземете действителния размер, като използвате naturalWidth / naturalHeight, ако трябва да имате нужда от тях по-късно - пълното изображение ще бъде заредено при всички случаи):

var bg = new Image(width, height);

Но можете просто да използвате ширина и височина с метода drawImage() (вижте по-долу).

Брой 3

Третият проблем е, че не позволявате на изображението да се зареди. Зареждането на изображения е асинхронно, така че трябва да добавите манипулатор onload:

var bg = new Image();
bg.onload = done;         /// wait for image to load, then call done()
bg.src = "images/bg.png";

function done() {
    c.drawImage(bg,0,0);
    /// continue here
}

По желание дефинирайте размера на дестинацията по следния начин:

function done() {
    c.drawImage(bg,0,0, width, height);  /// the size you want
    /// continue here
}

Ако искате да запълните платното, използвайте:

c.drawImage(bg,0,0, canvas.width, canvas.height);

Надявам се това да помогне!

person Community    schedule 07.02.2014
comment
Вие сте страхотни.. Благодаря много. - person Rikin Thakkar; 07.02.2014

Тъй като е върху платно, трябва да ги зададете във функцията drawimage

canvas = document.getElementById("canvas1");
c = canvas.getContext("2d");
var bg = new Image();
bg.src = "images/bg.png";
c.drawImage(bg,0,0, 100, 100);
person Emilio Rodriguez    schedule 07.02.2014
comment
c.drawImage(bg,0,0, 100, 100) работи.. Но какво да направя, ако искам да приложа това за повече от едно изображение.. Трябва да е динамично.. Тук даваме статична височина 100. - person Rikin Thakkar; 07.02.2014
comment
@RikinThakkar работи на вашия локален компютър, но не работи на външен сървър, тъй като този код не обработва зареждането на изображения. - person ; 07.02.2014
comment
@Ken Това означава, че този код няма да работи динамично..? - person Rikin Thakkar; 07.02.2014
comment
@RikinThakkar ще работи динамично, но тъй като зареждането на изображения е асинхронно. трябва да изчакате изображението да се зареди. Ето защо трябва да добавите манипулатора за натоварване и да продължите от там. Ако се опитате да нарисувате изображението, преди да се е заредило, то ще се окаже празно. - person ; 07.02.2014