Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема при получении данных из input (https://javascript.ru/forum/events/30571-problema-pri-poluchenii-dannykh-iz-input.html)

Striker_ 08.08.2012 17:47

Проблема при получении данных из input
 
Есть поле input в которое я ввожу текст. Справа от поля input картинка, на определенных координатах которой собственно и появляется вводимый текст. Пишу на HTML5 используя элемент Canvas:

<!DOCTYPE HTML>
<head>
        <meta http-equiv="content-type" content="text/html"; charset="utf-8" />
        <title>Test HTML5</title> 

    <script type="text/javascript">
        function loader()
        {
            var name = document.getElementById('name').value;            

            var canvas = document.getElementById('canvas');
            var canvas1 = canvas.getContext('2d');
            canvas1.font = 'italic 20px sans-serif';
            canvas1.strokeText(name, 180, 150);
        }            
    </script>
</head> 

<body onkeyup="loader()"> 

<p><h3>Enter text for front side</h3>
<form method="post" action="">
    <p>Company Name</p>
    <p><input type="text" name="name" id="name"></p>
</form></p> 

<canvas id="canvas" width="669" height="384" style="background-image: url(img.jpg); position: absolute; left: 250px; top: 76px;"></canvas> 

</body>
</html>

Вводимый текст отображается в нужных координатах на картинке, но есть проблема... Если удалять текст из input'a - выводимый текст на картинке остается и вообще если удалить текст и вписано заново - новый текст накладывается на старый. Как это исправить?

Deff 08.08.2012 18:02

Striker_,
Попробуйте перед записью в канву текста - сохранить исходную картинку в буфер и после нового ввода или стирания - восстанавливать из буфера исходную и накладывать на неё

Striker_ 08.08.2012 18:16

Вообще может как-то дописать функцию loader(), которая после каждого отпускания клавиши будет обновлять значение поля input?

vadim5june 08.08.2012 18:23

Цитата:

Сообщение от Striker_
Как это исправить?

попробуйте input такой
<input style='position:absolute;z-index:10;left:260px;top:100px'>
а canvas допишите z-index:1

Striker_ 08.08.2012 18:28

Ой, не значение поля input, а значение переменной result
function loader()
        {
            var name = document.getElementById('name').value;
            
            var canvas = document.getElementById('canvas');
            var canvas1 = canvas.getContext('2d');
            canvas1.font = 'italic 40px sans-serif;';
            $result = canvas1.strokeText(name, 180, 150);            
        }


vadim5june
Не помгло. Вводимый текст почему-то стал очень мелким.
Я так понимаю z-index:1 в Canvas надо добавлять сюда: canvas1.font = 'italic 40px sans-serif; z-index:1';

vadim5june 08.08.2012 18:44

Цитата:

Сообщение от Striker_
Ой, не значение поля input, а значение переменной result

так Вы прям в канвас записываете-все предыдущие рекомендации не имеют смысла-
надо рендеринг канваса делать-очищать канвас и перерисовывать
или сделайте текст в прямоуольнике
canvas1.font = 'italic 40px sans-serif;';
canvas1.fillStyle='white';
canvas1.fillRect(175,130,100,45);
$result = canvas1.strokeText(name, 180, 150);

vadim5june 08.08.2012 18:47

Цитата:

Сообщение от Striker_
Я так понимаю z-index:1 в Canvas надо добавлять сюда: canvas1.font = 'italic 40px sans-serif; z-index:1';

нет здесь оставьте как было-из-за этого он мелким стал
z-index уже не нужен

Striker_ 08.08.2012 18:54

Порешал вот так:
function loader()
        {
            var name = document.getElementById('name').value;
            var canvas = document.getElementById('canvas');
            var canvas1 = canvas.getContext('2d');
            canvas1.font = 'italic 20px sans-serif';
            canvas1.clearRect(0, 0, canvas.width, canvas.height);
            canvas1.strokeText(name, 180, 150);   
        }

Но теперь всплыла другая проблема... Дело в том что полей input на странице много, просто в примере в первом посте привел пример с одним инпутом.

Когда вношу информацию во второй инпут, текст на картинке из первого инпута пропадает и выводится текст из второго.
<script type="text/javascript">
        function loader()
        {
            var name = document.getElementById('name').value;
            var canvas = document.getElementById('canvas');
            var canvas1 = canvas.getContext('2d');
            canvas1.font = 'italic 20px sans-serif';
            canvas1.clearRect(0, 0, canvas.width, canvas.height);
            canvas1.strokeText(name, 180, 150);   
        }
        
        function loader2()
        {
            var message = document.getElementById('message').value;
            var canvas_new = document.getElementById('canvas');
            var canvasl1_new = canvas_new.getContext('2d');
            canvasl1_new.font = 'italic 20px sans-serif';
            canvasl1_new.clearRect(0, 0, canvas_new.width, canvas_new.height);
            canvasl1_new.strokeText(message, 280, 250);   
        }                  
    </script>


Вообщем надо реализовать функционал так как сделно тут:
http://www.vistaprint.com/vp/ns/bcfr...ds&xnav=TopNav
Слева вводим текст в поля, справа он отображается на визитке.

vadim5june 08.08.2012 19:16

Цитата:

Сообщение от Striker_ (Сообщение 195708)
Вообщем надо реализовать функционал так как сделно тут:
http://www.vistaprint.com/vp/ns/bcfr...ds&xnav=TopNav
Слева вводим текст в поля, справа он отображается на визитке.

там на каждый инпут 2 строчки
canvasl1_new.font = 'italic 20px sans-serif';
 canvasl1_new.strokeText(message, 280, 250);

со своим координатами и размером шрифта
а Вы все в один пишите
скорее всего надо сделать 2 канваса в одном картинка в другом пишем данные-
тогда будет лучше ренднринг делать-картинка все время на месте стоять будет

Striker_ 09.08.2012 00:32

vadim5june
Вообщем надо передрать полностью функционал того сервиса один в один. Есть шаблоны визиток и слева от них поля, в которые вводится информация, которая в последствии отображается на шаблоне-визитке. Можно даже код один в один передрать, но там очень много всего, путаюсь.:help:


Часовой пояс GMT +3, время: 22:45.