Форум программистов, компьютерный форум, киберфорум
JavaScript: HTML5 Canvas
Войти
Регистрация
Восстановить пароль
Другие темы раздела
HTML5 Canvas Canvas и прорисовка контура Всем привет! Задача состоит в следующем:есть изображение() Нужно, что бы только его контур прорисовывался в canvas. Потом я хочу на этот силуэт повесить анимацию на js. Нашла подобное, но под себя переделать не выходит: <!doctype html> <html> <meta charset='utf-8'> <head> https://www.cyberforum.ru/ javascript-canvas/ thread2192648.html Расположение фигуры ctx.rotate HTML5 Canvas
Здравствуйте! Столкнулась с такой проблемой, что не могу повернуть фигуру на нужное место. Код красным цветом. Хочу чтобы она была бы симметрична тем двум, но почему-то не получается ее поставить в нужное положение (в правый верхний либо нижний левый углы). Какой только ctx.rotate не пробовала, не выходит. Помогите пожалуйста. <html> <head>
HTML5 Canvas Прокрутка на canvas мышью Как сделать прокрутку холста на html5 с помощью мыши, а то у меня все объекты не помещаются? https://www.cyberforum.ru/ javascript-canvas/ thread2189594.html HTML5 Canvas Веб сокет и Canvas Как передать состояние холста Canvas в бинарном формате по веб-сокету? Либо через Blob или ArrayBuffer, вот так почему-то не получается(( var img = context.getImageData(0, 0, canvas.width, canvas.height); var binary = Uint8Array.from(img.data); ws.send(binary.buffer); и так тоже( var img = context.getImageData(0, 0, canvas.width, canvas.height); ws.send(img); // где ws - веб сокет https://www.cyberforum.ru/ javascript-canvas/ thread2188660.html
HTML5 Canvas Сдвиг при заполнении
Здравствуйте! Рисую линию через интервал и нужно когда ширина заполнения была больше 75% чтоб сдвигало в лева Попробовал просто двигать в лева canvas и увеличивать ширину. Если увеличить атрибут ширины то линия полностью пропадает, а если через css то график все равно не уходит а потихоньку увеличивается Подскажите как правильно реализовать
HTML5 Canvas Пример с книги не работает https://www.cyberforum.ru/ javascript-canvas/ thread2186289.html
первый же пример с книги по вебгл не работает <!DOCTYPE html> <html lang=“en"> <head> <meta charset="utf-8" /> <title>Draw a blue rectangle (canvas version)</title> </head> <body onload="main()"> <canvas id="example" width="200" height="150">
HTML5 Canvas Отображение цилиндра между двумя точками three.js https://www.cyberforum.ru/ javascript-canvas/ thread2185895.html
Всем привет! Нужно отобразить цилиндр между двумя конкретными точками в трехмерном пространстве. Высоту цилиндра понятно как находить ((x2-x1)2+(y2-y1)2+(z2-z1)2)1/2 , а вот как его правильно повернуть, чтобы центр верхней грани совпадал с одной точкой, а нижней грани с другой - никак придумать не могу. Помогите, пожалуйста!
HTML5 Canvas Перемещение объекта мышкой
Я перехожу с flash на html5, точнее уже перешла и пытаюсь сделать перемещение объекта с помощью мышкой. Столкнулась с такой проблемой, что если взять объект и переместить его по вверх другого, то потом можно взять целую группу объектов за один щелчок и перенести их куда-нибудь. Как сделать так, чтобы брался тот объект который отрисовывался по вверх остальных объектов, а нижние объекты оставались...
HTML5 Canvas Как обновить линию на холсте js https://www.cyberforum.ru/ javascript-canvas/ thread2184989.html
Есть поле input в него вводится некая цифра, при отпускании клавиши рисуется линия длинной 50+цифра из input но если удалить прежнее значение из текстового поля и ввести новое, то рисуется линия как для прежнего значения, не могу понять как сделать чтобы рисовалась линия с новым значением длинны <input type="text" id="sms">
HTML5 Canvas Анимация Canvas, (rotate) https://www.cyberforum.ru/ javascript-canvas/ thread2184823.html
Есть функция, которая рисует крест и setInterval, который вызывает функцию. Как сделать так, чтоб крест начал поворачиваться, игрался с функциями save() и rotate(), так ничего и не получилось с плоскостями, крест вращается во круг какой-то точки, которой задаю translate() по кругу, а не вокруг себя по основанию центра. var fps=20; function test(){ ctx.clearRect(0, 0, bodyWidth,...
Вывести на холст термин и связанные с ним слова HTML5 Canvas
Доброго времени суток. Задача такая - необходимо, используя JS, вывести на холст термин и связанные с ним слова. От термина к каждому слову должна рисоваться линия. Если кликнуть на любое слово, выводится это слово как термин и связанные уже с ним слова. Термин и слова достаются из xml файла. Есть эта же задача, только на Flash. http://el.fa.ru/glossary_rcb/fldict.html
HTML5 Canvas Установка цвета линии Здравствуйте! Подскажите что не верно, не задается цвет линии ctx.beginPath(); ctx.strokeStyle = '#FFF'; ctx.fillStyle = '#FFF'; ctx.lineWidth = 1; line(); function line(){ https://www.cyberforum.ru/ javascript-canvas/ thread2180972.html
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
06.03.2018, 22:54 0

Убрать квадрат при клике на него - HTML5 Canvas - Ответ 12190521

06.03.2018, 22:54. Показов 5327. Ответов 5
Метки (Все метки)

Ответ

Я сам тоже изучаю JavaScript и программирование в целом. Задание этой темы мне подходит, чтобы понять некоторые вещи, делая что-то на практике. Когда пытаешься что-то объяснить, то сам начинаешь лучше понимать теорию. Задание простое, но интересное.

Я считаю, что выполнил задание. Теперь квадраты появляются в месте клика левой кнопки мыши (ЛКМ) и исчезают если по ним кликнуть правой кнопкой мыши (ПКМ)

Демка в песочнице

Сначала квадраты появляются со случайных координатами, со случайным размерами и со случайными цветами (r, g, b). По клику ЛКМ по указанной курсором координате появляется квадрат со случайным размерами и со случайными цветами.

Краткое пояснение к коду. В коде присутствует класс Square (Квадрат), который находится в файле Square.js и объект-синглтон Scene, который находится в файле Scene.js. Есть один файл main.js, где происходит вызов метода инициализации Initialize объекта-синглтона Scene. В методе Initialize происходит создание квадратов (объектов класса Square)

Объект-синглтон создаётся таким образом. Те методы, которые возвращаются через return являются открытыми (public), а те, которые не возвращаются в return являются закрытыми (private). Закрытые методы дополнительно помечены нижним подчёркиванием, как, например, метод _Draw.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var Scene = (function() {
    var _canvas = null;
    var _ctx = null;
    var _backgroundColor = "white";
 
    var squareArray = [];
 
    function Initialize(canvasID) {
        /* ... */
    }
 
    function _Draw() {
        _ctx.fillStyle = _backgroundColor;
        _ctx.fillRect(0, 0, _canvas.width, _canvas.height);
        for (var i = 0; i < squareArray.length; i++) {
            squareArray[i].Draw();
        }
    }
 
    return {
        Initialize: Initialize
    };
}());
Объект Scene будет только один, потому что Сцена по логике только одна в этой программе. Сцена - это то место, где создаются объекты (метод Initialize) и где они рисуются (метод Draw)

var squareArray = []; // Массив для хранения квадратов. При нажатии на ЛКМ в массив добавляется квадрат (объект класса Square). При нажатии на ПКМ - квадрат из массива удаляется.

У квадрата есть метод IsCollision(x, y), который возвращает true, если точка клика мыши (x, y) попала в квадрат и false, если точка клика мыши (x, y) не попала в квадрат.

index.html
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
 
<head>
    <title>Canvas API. Drawing two squares. OOP</title>
    <script src="Square.js"></script>
    <script src="Scene.js"></script>
    <script src="main.js"></script>
    <style>
        #renderCanvas {
            border: solid 1px;
        }
    </style>
</head>
 
<body>
    <canvas id="renderCanvas" width="400" height="400"></canvas>
</body>
 
</html>
main.js
Javascript
1
2
3
4
5
6
"use strict";
 
function main() {
    Scene.Initialize("renderCanvas");
}
window.onload = main;
Scene.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
"use strict";
 
var Scene = (function() {
    var _canvas = null;
    var _ctx = null;
    var _backgroundColor = "white";
 
    var squareArray = [];
 
    function Initialize(canvasID) {
        _canvas = document.getElementById(canvasID);
        _ctx = _canvas.getContext("2d");
 
        for (var i = 0; i < 3; i++) {
            var x = _GetRandomInt(100, 300);
            var y = _GetRandomInt(100, 300);
            var r = _GetRandomInt(0, 255);
            var g = _GetRandomInt(0, 255);
            var b = _GetRandomInt(0, 255);
            var size = _GetRandomInt(40, 80);
            var square = new Square(_ctx, x, y, size, 'rgba(' + r + ', ' + g + ', ' + b + ', 255)');
            squareArray.push(square);
        }
 
        // Handler for left and right mouse button click
        window.onmousedown = function(evt) {
            var x = evt.clientX;
            var y = evt.clientY;
            var rect = evt.target.getBoundingClientRect();
            x = Math.floor(x - rect.left);
            y = Math.floor(y - rect.top);
 
            if (evt.button === 0) {
                _AddSquare(x, y);
            } else if (evt.button === 2) {
                _DeleteSquares(x, y);
            }
        };
 
        // Hide context menu by right mouse click
        window.oncontextmenu = function() {
            return false;
        };
 
        _Draw();
    }
 
    function _AddSquare(x, y) {
        var r = _GetRandomInt(0, 255);
        var g = _GetRandomInt(0, 255);
        var b = _GetRandomInt(0, 255);
        var size = _GetRandomInt(40, 80);
        var square = new Square(_ctx, x, y, size, 'rgba(' + r + ', ' + g + ', ' + b + ', 255)');
        squareArray.push(square);
        _Draw();
    }
 
    function _DeleteSquares(x, y) {
        for (var i = 0; i < squareArray.length; i++) {
            if (squareArray[i].IsCollision(x, y)) {
                squareArray.splice(i, 1);
            }
        }
        _Draw();
    }
 
    /**
     * Returns a random integer between min and max
     * Using Math.round() will give you a non-uniform distribution!
     */
    function _GetRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
 
    function _Draw() {
        _ctx.fillStyle = _backgroundColor;
        _ctx.fillRect(0, 0, _canvas.width, _canvas.height);
        for (var i = 0; i < squareArray.length; i++) {
            squareArray[i].Draw();
        }
    }
 
    return {
        Initialize: Initialize
    };
}());
Square.js
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"use strict";
 
function Square(ctx, x, y, size, color) {
    this._ctx = ctx;
    this._x = x;
    this._y = y;
    this._size = size;
    this._color = color;
}
 
Square.prototype.Draw = function() {
    this._ctx.fillStyle = this._color;
    this._ctx.fillRect(this._x, this._y, this._size, this._size);
}
 
Square.prototype.IsCollision = function(x, y) {
    return (this._x <= x && x <= this._x + this._size &&
        this._y <= y && y <= this._y + this._size);
};


Вернуться к обсуждению:
Убрать квадрат при клике на него HTML5 Canvas
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2018, 22:54
Готовые ответы и решения:

Удалить checkbox при клике на него.
Здравствуйте, помогите пожалуйста, надо удалить checkbox при клике на него. const btn =...

Скрыть элемент при клике на него
Здравствуйте! Подскажите как правильно скрыть элемент при нажатии на него... Я написал такой код,...

Сокрытие элемента при клике вне него
Здравствуйте. Имеется такой код $(function(){ //Живой поиск $('.who').bind(&quot;change...

Сворачивание блока при повторном клике на него
Доброго дня! На сайте используется простейший аккордеон: $(function() {...

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

Получение состояния элемента при клике на него
У меня есть список элементов с датам суммами и т.д. Нужно сделать так, чтобы при клике на нем можно...

Запрет активации checkbox при клике на него
Вообщем ситуация такая есть checkbox он false (то есть галка на нем не стоит) при клике на него...

Как убрать элемент при клике на телефоне при адаптивной верстке?
Здравствуйте!Делаю сайт, и при адаптивной верстке,для телефона, мне надо, чтобы при нажатии на...

Удалить подсветку вокруг текстбокса при клике на него
Подскажите пожалуйста как удалить подсветку вокруг текстбокса при клике на него? основную рамку...

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