Форма ввода внутри элемента canvas
Мне интересно, есть ли способ получить ввод от пользователя, предпочтительно в texbox (или в любом месте, где пользователь может видеть, что он пишет) в элементе canvas через javascript.
4 ответов
расположите текстовое поле над верхней частью элемента canvas, используя абсолютное позиционирование.
мой предлагаемый макет что-то вроде:
<div style="position:relative;width:800px;height:800px">
<canvas width="800" height="800"></canvas>
<input type="text" style="position:absolute;left:100px;top:300px;width:600px; etc...." />
</div>
С этим у вас есть родственник, расположенный <div>
чтобы основать, где вы собираетесь всплывать, я бы, вероятно, также добавил модальный фон...
надеюсь, это поможет-ck
вопрос немного старый, но я хотел предоставить альтернативу абсолютному позиционированию. Вы можете установить фоновое изображение (предположительно, div больше вашего текстового поля). Вот пример:
HTML-код:
...<canvas id="canvas"></canvas> <div id="backDrop">...[your textbox]</div>...
Javascript:
$('#backDrop').css('background-image', 'url(' + document.getElementById('canvas').toDataURL() + ')');
здесь jsfiddle в качестве примера.
Как отмечает здесь, это по существу делает снимок холста в точке, где вы устанавливаете свойство background-image. Любой изменения, которые вы делаете на холсте после установки фона-изображение не будет отражено (если вы не переустановите его), но это, вероятно, то, что вы хотите в большинстве случаев.
существует библиотека ввода холста. Он не использует никаких элементов DOM, но построен исключительно на холсте. Вы можете прочитать больше об этом и загрузить его вhttp://goldfirestudios.com/blog/108/CanvasInput-HTML5-Canvas-Text-Input . Это открытый исходный код.
вы также можете попробовать его со следующим:
<div style="margin:0px;padding:0px;position:absolute;width:[amount by programmer];height:[amount by programmer];border-style:solid;border-color:[if wanted];">
<canvas style="width:700px;height:700px;"></canvas>
<input type="text" style="position:absolute;width:[amount by programmer];height:[amount by programmer];"/></div>