Форум программистов, компьютерный форум, киберфорум
JavaScript: HTML5 Canvas
Войти
Регистрация
Восстановить пароль
Другие темы раздела
HTML5 Canvas Рисование эллипса на канвасе Необходимо рисовать эллипс на канвасе фиксированного размера. Если эллипс выходит за границы канваса, то необходимо, чтобы он шел по границе канваса. На скринах красной линией я показал, как примерно оно должно быть. Вывести закономерность между размеров, вводимым в поля "a" и "b", я так и не смог. html-страничка: <HTML> <BODY> <h1 align="middle">Построение эллипса</h1> <p... https://www.cyberforum.ru/ javascript-canvas/ thread2624102.html Реализуйте одностраничное Web-приложение для построения графика функции одной переменной, заданной пользователем HTML5 Canvas
В общем очень нужно решение для задачи, я просто вообще не могу понять как ее можно сделать. Условие таково: Реализуйте одностраничное Web-приложение для построения графика функции одной переменной, заданной пользователем. Пользователь вводит: Определение функции с использованием синтаксиса Javascript, Диапазон значений по оси абсцисс. Интерфейс приложения должен включать в себя: поле для...
HTML5 Canvas Программа - paint на html, css и js https://www.cyberforum.ru/ javascript-canvas/ thread2621017.html
Если я что-то нарисую на canvas, потом нажму клавишу s - save и r - replay, при попытке изменить фон он не будет изменятся, но при этом переменной back_color_canv будет присваиваться цвет. Для того чтоб поменять фон canva`са надо нажать на кнопку "изменить цвет фона" и выбрать цвет кликнув на цвет левее от кнопки. Все записано в одном файле. <!DOCTYPE html> <html lang="en"> <head>...
HTML5 Canvas Выдает не точное значение В проекте задание, из backend вывести на frontend данные ускорения и расстояния. Код написан на рандомные числа, так как машина, с которой будут выводиться данные на экран, еще не готова. С кодом рандомных чисел, на экран выводится каждая вторая цифра ( в console.log выводится каждая цифра ). Если у кого было подобное, либо знает решение, напишите. Очень важно. Добавлено через 48 секунд... https://www.cyberforum.ru/ javascript-canvas/ thread2618062.html
Какой максимальный размер canvas может быть? HTML5 Canvas
Иными словами, какой сейчас у браузеров максимальный размер данных, передаваемых через toDataURL ? Раньше во многих браузерах этот размер, вроде бы, ограничивался десятками килобайт.
HTML5 Canvas Способы защиты от вирусов в рисунках? https://www.cyberforum.ru/ javascript-canvas/ thread2615437.html
Дело в том, что многие, если не все антивирусы обозначают как опасный даже файл с расширением txt, если он содержит нехороший код. Как быть? Добавлено через 1 минуту А нехороший код можно достаточно легко записать в рисунок (например, в комментарии). Получается, любой рисунок, загруженный на сайт, может, потенциально, содержать нехороший код.
HTML5 Canvas Вызов drawImage() в отдельной функции https://www.cyberforum.ru/ javascript-canvas/ thread2609997.html
Доброго всем дня, в ходе изучения javascript, столкнулся с несколькими проблемами, а именно с отрисовкой изображения. Суть вопроса такова: возможно ли вызвать drawImage() не в onload? Собственно, имею подобную часть html-страницы: <canvas id="testCanvas" width="800" height="600" style="border:1px solid magenta;"> </canvas> <div id="result"></div> и скрипт располагаемый ниже: var canvas...
Нужно построить график линейной функции в Canvas HTML5 Canvas
У меня есть линейное уравнение по типу: y=A*X + B Например, y = 2*x + 4 Мне нужно отобразить его на холсте Canvas с любыми значениями A и B. Как мне нужно это реализовать? Подскажите пожалуйста, или скиньте какой-то сайт с этим примером
HTML5 Canvas Мне нужно добавить canvas элемент в блок <div> используя Javascript и начать его менять https://www.cyberforum.ru/ javascript-canvas/ thread2602089.html
Что я не делаю, выдаёт такую вот ошибку: Cannot read property 'getContext' of null, при том, что сам канвас создаётся внутри блока <div> var scrolling = document.getElementById('scroll'); var canvas2= document.createElement("canvas"); canvas2.setAttribute("id", "canvas1"); scrolling.append(canvas2);
HTML5 Canvas Canvas и событие onmousemove https://www.cyberforum.ru/ javascript-canvas/ thread2601663.html
Здравствуйте, уважаемые товарищи! Продолжаю баловаться с JS+Canvas и не получается сделать одну программку. Для начала код: <html> <body>
HTML5 Canvas Наложение текстуры в Three.js на фигуру
Здравствуйте! У меня возникла проблема с наложением текстуры на 3d фигуру,помогите кто разбирается в этом, с three.js работаю впервые, вот суть проблемы: у меня есть текстура картинко в png формате, и еще отдельными файлами, отдельными файлами не получается подключить так как тестур много, больше 50, нужно подключить картинку, только на верхнюю часть персонажа ( на голову), вот только...
HTML5 Canvas Закрасить canvas по клику ЛКМ Здравствуйте всем :) С javascript "на ты&qu
1 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 5
0

Как отменить последнее действие при рисовании в canvas карандашом (pencil)? - HTML5 Canvas - Ответ 14466349

24.04.2020, 00:39. Показов 1788. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Задача:
  • создать холст canvas с возможностью свободного рисования на нем "карандашом",
  • с возможностью полной отмены нарисованного (очисткой холста)
  • с возможностью отмены последнего действия (последней линии, нарисованной "карандашом").

Статус выполнения: выполнено частично. Создан холст, работает "карандаш", работает полная очистка холста. Не получается написать механизм отмены последнего действия ''карандаша", последней проведенной кривой.

Причина сбоя: не хватает данных из-за недостаточного личного опыта работы с canvas. Гугление ТОП-30 к явному ответу также не привело.

Запрос: помощь и/или совет по решению задачи отмены последнего действия "карандаша".

Плюс, ответ на этот вопрос заполнит в Сети информационный пробел для будущих разработчиков.

Текущий код JS:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
if(window.addEventListener) {
    window.addEventListener('load', function () {
    
    var canvas, context, tool;
 
    function init () {
        // Находим canvas элемент
        canvas = document.getElementById('tablet');
        
        if (!canvas) {
            alert('Ошибка! Canvas элемент не найден!');
            return;
        }
 
        if (!canvas.getContext) {
            alert('Ошибка: canvas.getContext не существует!');
            return;
        }
 
        // Получаем 2D canvas context.
        context = canvas.getContext('2d');
        if (!context) {
            alert('Ошибка: getContext! не существует');
            return;
        }
        
        tool = new tool_pencil();
        canvas.addEventListener('mousedown', ev_canvas, false);
        canvas.addEventListener('mousemove', ev_canvas, false);
        canvas.addEventListener('mouseup',   ev_canvas, false);
    }
    
        // Очистка всего нарисованного на поле
        document.getElementById('clear').addEventListener('click', function() {
        context.clearRect(0, 0, tablet.width, tablet.height);
        }, false);
 
    // Здесь мы будем ловить движения мыши
    function tool_pencil () {
        var tool = this;
        this.started = false;
 
    
        this.mousedown = function (ev) {
            context.beginPath();
            context.moveTo(ev._x, ev._y);
            tool.started = true;
        };
 
        // Эта функция вызывается каждый раз, когда вы перемещаете мышь.
        // Но рисование происходит только когда вы удерживаете кнопку мыши
        // нажатой.
        this.mousemove = function (ev) {
            if (tool.started) {
                context.lineTo(ev._x, ev._y);
                context.stroke();
            }
        };
 
        // Событие при отпускании мыши
        this.mouseup = function (ev) {
            if (tool.started) {
                tool.mousemove(ev);
                tool.started = false;
            }
        };
    }
 
    // Эта функция определяет позицию курсора относительно холста
    function ev_canvas (ev) {
        if (ev.layerX || ev.layerX == 0) { // Firefox
            ev._x = ev.layerX;
            ev._y = ev.layerY;
        } else if (ev.offsetX || ev.offsetX == 0) { // Opera
            ev._x = ev.offsetX;
            ev._y = ev.offsetY;
        }
 
        // Вызываем обработчик события tool
        var func = tool[ev.type];
        if (func) {
            func(ev);
        }
    }
 
    init();
 
}, false); }
И очевидный тег в HTML:

HTML5
1
2
<canvas id = "tablet" width="1050" height="900"></canvas>
<button id="clear">Очистка всего холста</button>
Благодарю сообщество за помощь в решении!

Добавлено через 26 минут
Вопрос снят. Для меня подходит ответ тут: https://stackoverflow.com/ques... ing-canvas

Пуст код останется для будущих искателей, не знакомых с английским:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<!--[if lt IE 9]><script type="text/javascript" src="../excanvas.js"></script><![endif]-->
 
<style>
    body{ background-color: ivory; }
    canvas{border:1px solid red;}
</style>
 
<script>
$(function(){
 
    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");
    var lastX;
    var lastY;
    var mouseX;
    var mouseY;
    var canvasOffset=$("#canvas").offset();
    var offsetX=canvasOffset.left;
    var offsetY=canvasOffset.top;
    var isMouseDown=false;
    var brushSize=20;
    var brushColor="#ff0000";
    var points=[];
 
 
    function handleMouseDown(e){
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);
 
      // Put your mousedown stuff here
      ctx.beginPath();
      if(ctx.lineWidth!=brushSize){ctx.lineWidth=brushSize;}
      if(ctx.strokeStyle!=brushColor){ctx.strokeStyle=brushColor;}
      ctx.moveTo(mouseX,mouseY);
      points.push({x:mouseX,y:mouseY,size:brushSize,color:brushColor,mode:"begin"});
      lastX=mouseX;
      lastY=mouseY;
      isMouseDown=true;
    }
 
    function handleMouseUp(e){
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);
 
      // Put your mouseup stuff here
      isMouseDown=false;
      points.push({x:mouseX,y:mouseY,size:brushSize,color:brushColor,mode:"end"});
    }
 
 
    function handleMouseMove(e){
      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);
 
      // Put your mousemove stuff here
      if(isMouseDown){
          ctx.lineTo(mouseX,mouseY);
          ctx.stroke();     
          lastX=mouseX;
          lastY=mouseY;
          // command pattern stuff
          points.push({x:mouseX,y:mouseY,size:brushSize,color:brushColor,mode:"draw"});
      }
    }
 
 
    function redrawAll(){
 
        if(points.length==0){return;}
 
        ctx.clearRect(0,0,canvas.width,canvas.height);
 
        for(var i=0;i<points.length;i++){
 
          var pt=points[i];
 
          var begin=false;
 
          if(ctx.lineWidth!=pt.size){
              ctx.lineWidth=pt.size;
              begin=true;
          }
          if(ctx.strokeStyle!=pt.color){
              ctx.strokeStyle=pt.color;
              begin=true;
          }
          if(pt.mode=="begin" || begin){
              ctx.beginPath();
              ctx.moveTo(pt.x,pt.y);
          }
          ctx.lineTo(pt.x,pt.y);
          if(pt.mode=="end" || (i==points.length-1)){
              ctx.stroke();
          }
        }
        ctx.stroke();
    }
 
    function undoLast(){
        points.pop();
        redrawAll();
    }
 
    ctx.lineJoin = "round";
    ctx.fillStyle=brushColor;
    ctx.lineWidth=brushSize;
 
    $("#brush5").click(function(){ brushSize=5; });
    $("#brush10").click(function(){ brushSize=10; });
    // Important!  Brush colors must be defined in 6-digit hex format only
    $("#brushRed").click(function(){ brushColor="#ff0000"; });
    $("#brushBlue").click(function(){ brushColor="#0000ff"; });
 
    $("#canvas").mousedown(function(e){handleMouseDown(e);});
    $("#canvas").mousemove(function(e){handleMouseMove(e);});
    $("#canvas").mouseup(function(e){handleMouseUp(e);});
 
    // hold down the undo button to erase the last line segment
    var interval;
    $("#undo").mousedown(function() {
      interval = setInterval(undoLast, 100);
    }).mouseup(function() {
      clearInterval(interval);
    });
 
 
}); // end $(function(){});
</script>
 
</head>
 
<body>
    <p>Drag to draw. Use buttons to change lineWidth/color</p>
    <canvas id="canvas" width=300 height=300></canvas><br>
    <button id="undo">Hold this button down to Undo</button><br><br>
    <button id="brush5">5px Brush</button>
    <button id="brush10">10px Brush</button>
    <button id="brushRed">Red Brush</button>
    <button id="brushBlue">Blue Brush</button>
</body>
</html>


Вернуться к обсуждению:
Как отменить последнее действие при рисовании в canvas карандашом (pencil)? HTML5 Canvas
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2020, 00:39
Готовые ответы и решения:

Как отменить последнее действие в DataGridView1
Как прописать возможность отмены последнего действия в DataGridView1 средствами visual basic net

Как отменить действие при щелчке в любом месте страницы
Всем привет ,у меня такой вопрос .написал код ,который увеличивает изображение по щелчке по нему...

Как убрать последнее действие при обновлении страницы?!!
Здравствуйте уважаемые! Есть TextBox в который я ввожу текст и по нажатии на кнопку значение...

Пропуск пикселей при рисовании на canvas
Здравствуйте. Проблема такая: есть изображение - и такой код в xe7 - Graphics::TBitmap...

0
24.04.2020, 00:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2020, 00:39
Помогаю со студенческими работами здесь

При рисовании на Bitmap.Canvas исчезает основное изображение
Procedure TDynamicObjects.Drawsquare(xmax, ymax, ymin, xmin: integer); begin ...

Ошибка при рисовании на форме через Canvas->FloodFill
Рисую на форме с CANVAS-&gt;FloodFill. Есть 2 формы. Хочу по нажатию клавиши на одной форме рисовать в...

Игра на Canvas как реализовать гравитацию и действие(событие) при соприкосновении с объектом
Как реализовать гравитацию и действие(событие) при соприкосновении с объектом. Хочу реализовать...

Как отменить действие стиля?
В главном html таблица красится через tbody tr:nth-child(odd) Присоединяю по событию другой html и...

Отменить действие как в блокноте
как мне отменить действие как в блокноте??

Как отменить действие обработчика?
Добрый вечер. Возник такой вопрос, можно ли по клику на кнопку отменить предыдущую обработку...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru