Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2018, 16:41
Интересующийся
Отправить личное сообщение для Nupster Посмотреть профиль Найти все сообщения от Nupster
 
Регистрация: 12.08.2014
Сообщений: 20

canvas и globalCompositeOperation
Пример для понимания: https://www.reed.be/

Хочется повторить примерно такое же.

Есть канвас, на нем 3 блока с изображениями + 1 блок с кругом, который двигается по алгоритму за указателем мыши. С этим проблем нет. Это реализовано и отлично работает.

Проблема заключается в том, что хочется задать для круга стиль - умножение(multiply), как это сделано на сайте примере, но чтобы круг оставался только внутри блоков с изображениями, то есть в моем случае, мне нужно также использовать (source-atop).

И вот незадача в том, что невозможно прописать сразу 2 свойства для globalCompositeOperation. Как быть? На сайте примере код минифицирован, как не пытался разобраться, что же они придумали - не получилось.

Если прописать только
context.globalCompositeOperation = 'source-atop';

то круг будет кататься внутри блоков и спасает только прозрачность, но это всё равно хуже, чем умножение цвета.

Если прописать только
context.globalCompositeOperation = 'multiply';

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

Последний раз редактировалось Nupster, 23.08.2018 в 16:47.
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2018, 16:56
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от Nupster
чтобы круг оставался только внутри блоков с изображениями
https://developer.mozilla.org/en-US/...Context2D/clip
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2018, 17:09
Интересующийся
Отправить личное сообщение для Nupster Посмотреть профиль Найти все сообщения от Nupster
 
Регистрация: 12.08.2014
Сообщений: 20

Сообщение от Alexandroppolus Посмотреть сообщение
https://developer.mozilla.org/en-US/...Context2D/clip
Я попробовал. Такое не прокатывает. Вот порядок действий, как я отрисовываю всё на канвасе, на mouseover всё просто повторяется.
//отрисовываю изображения
context.drawImage(...);
context.drawImage(...);
context.drawImage(...);

//тут вставить клип?
context.clip();

//вывод круга
context.globalCompositeOperation = 'multiply';
context.beginPath();
context.arc(pos.x, pos.y, r, 0, 2 * Math.PI);
context.fillStyle = slide.backgroundCircle;
context.fill();


В итоге круг не выводится совсем.
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2018, 17:41
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

https://jsfiddle.net/alexandroppolus/tmupx5f8/

clip использует тот путь, который ты наколбасил перед этим. В примере путь состоит из прямоугольников с картинками, условно обозначенных как red и blue

заодно глянь про save/restore, если надо будет убрать область clip
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2018, 18:01
Интересующийся
Отправить личное сообщение для Nupster Посмотреть профиль Найти все сообщения от Nupster
 
Регистрация: 12.08.2014
Сообщений: 20

Великолепно! Спасибо за помощь, всё заработало.
Ответить с цитированием
  #6 (permalink)  
Старый 10.09.2018, 18:24
Интересующийся
Отправить личное сообщение для Nupster Посмотреть профиль Найти все сообщения от Nupster
 
Регистрация: 12.08.2014
Сообщений: 20

Заметил такую проблему. В firefox данная фишка не работает. А в хроме всё ок. Как быть?
Ответить с цитированием
  #7 (permalink)  
Старый 10.09.2018, 18:37
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от Nupster
В firefox данная фишка не работает.
Пример Alexandroppolus в Firefox Quantum 61.0.31 работает
Ответить с цитированием
  #8 (permalink)  
Старый 11.09.2018, 00:25
Интересующийся
Отправить личное сообщение для Nupster Посмотреть профиль Найти все сообщения от Nupster
 
Регистрация: 12.08.2014
Сообщений: 20

Сообщение от Dilettante_Pro Посмотреть сообщение
Пример Alexandroppolus в Firefox Quantum 61.0.31 работает

Firefox(61, 62 тоже проверил, аналогично)


А вот, что в Chrome - верно:
Ответить с цитированием
  #9 (permalink)  
Старый 11.09.2018, 14:58
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

У меня пример Alexandroppolus, (именно он - по ссылке в пост #4)
в Firefox Quantum 61.0.31 (обновился до 62.0 - то же самое), выглядит точно так же, как в Хроме
Ответить с цитированием
  #10 (permalink)  
Старый 11.09.2018, 15:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Dilettante_Pro,
у меня тоже что уNupster,
результат разный
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли использовать анимацию svg внутри canvas? Negotiant Общие вопросы Javascript 0 30.08.2017 10:56
Canvas функции и JQ Tanya51 Общие вопросы Javascript 5 29.07.2017 14:41
Повтор фото (getUserMedia(),HTML5 Canvas) aspex Элементы интерфейса 1 27.12.2014 16:46
Создание экземпляра Canvas не затрагивая HTML Tails Общие вопросы Javascript 2 09.03.2012 13:55
Добавить на canvas еще один елемент greengarlic Общие вопросы Javascript 5 22.09.2010 10:16