#javascript #html
Вопрос:
привет, я хотел бы создать сайт, на котором вокруг изображения вы можете увидеть радиальную надпись (ссылку) (например, солнечные лучи). На самом деле я попытался поместить изображение и через холст я пытаюсь наложить круг, а затем соединить с ним радиальные записи (следующим шагом будет перемещение записей), однако на самом деле я не могу сгенерировать прямоугольник холста с изображением того же размера (чтобы затем иметь правильные пропорции длясоздайте круг). Я пробовал getAttribute или $ {nameclass.width} и другие. но я не могу восстановить размер изображения с помощью javascript. (В css я использую проценты для лучшей адаптации к последующим реализациям @media)
<canvas id="myCanvas" >Error</canvas>
<div >
<img class="logo_centrale" src="img.png" alt="Errore" >
<script>
document.getElementById("myCanvas").style.border = ' 3px solid #f00 ' ;
document.write(document.getElementsByClassName("logo_centrale").width);
var l = document.getElementsByClassName("logo_centrale").width;/*doesn't work*/
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.strokeStyle = ' #fff ';
l = l / 2 ;
a = a / 2 ;
ctx.arc( l , a ,200,0,2*Math.PI);
ctx.stroke();
</script>
</div>
body {
position: fixed;
background-color: black;
}
*{
border: dashed;
border-color: white;
}
.logo_centrale{
z-index: -1;
max-width: 45%;
position: relative;
display: block;
margin-top: 10%;
margin-left: auto;
margin-right: auto;
}
#myCanvas{ z-index: 2;
position:absolute;
width: 630px;
height: 430px;
margin-top: 11%;
margin-left: 27.3%;
}
Ответ №1:
Вы должны подождать, пока изображение будет готово, прежде чем пытаться получить размер, затем вы можете использовать .width
и .height
:
<img class="logo_centrale" src="img.png" alt="Errore" onload="process(event)">
<script>
function process(event) {
console.log(event.target.width)
console.log(event.target.height)
// your canvas code
}
</script>
Комментарии:
1. Существует возможность не использовать onload для тега и вызывать его через имя класса или идентификатор
2. вам нужно дождаться загрузки изображения, вы можете извлечь элемент по классу / идентификатору, а затем прикрепить прослушиватель событий с помощью кода
document.querySelector('.logo_centrale').onload = ...
. Но проблема в том, что если изображение загружается до того, как вы прикрепите событие, событие никогда не сработает. Другой вариант — иметь изображение безsrc
атрибута, и с помощью кода сначала вы добавляете прослушиватель событий onload, а затем устанавливаете src, таким образом, он должен работать. Если вы не хотите использовать onload, вы можете использовать некоторый взлом setTimeout, но onload — это правильный обратный вызов, который нужно использовать, чтобы убедиться, что он загружен3. не работает, я пробую оба решения
4. jsfiddle.net/andrea97/42dgxa8m/6/#amp;togetherjs=d7sEP9qPtA
5. Вы устанавливаете
src
атрибут в функции, которая запускается при запускеonload
обратного вызова, ноsrc
в начале вашего изображения нет, поэтому оно никогда не вызоветonload
событие. вы можете сделать что-то подобное, чтобы правильно прикрепить обратные вызовы jsfiddle.net/m3uqenhb/2