Из моего личного опыта ваш вариант (1) является привлекательным выбором, но могут быть некоторые интересные моменты при превращении его в полезный плагин jQuery.
Я работал над системой визуализации финансовых данныхкоторый явно использует HTML5 Canvas для рисования графиков и диаграмм.У нас есть разные виртуальные «сцены» или «слайды» на холсте, которые «скользят» и «скользят» на холсте, так же, как вы перемещаетесь на большом виртуальном холсте.Все кнопки обработки событий нарисованы исключительно на холсте, который определяет, какой экран мы будем показывать, но у нас есть одна / две нормальные HTML-формы, которые принимают пользовательский ввод и выводят эти «слайды».Мы используем jQuery для обработки событий из этих текстовых полей, но коды jQuery глубоко вложены в другие коды рисования Canvas (в отличие от внешнего вызова, который был бы идеальным кандидатом для создания плагина).
Скольжениеили обновление холста это другое дело.Это связано с тем, что это зависит не только от события jQuery, которое запускает обновление, но также от Canvas Framework (простой код или KineticJS, EaselJS, jCotton и т. Д.), Который отвечает за обновление.Если вы используете фреймворк, вам также необходимо взаимодействовать с фреймворком.
Для простоты давайте предположим, что есть функция обратного вызова, которую вы можете вызвать для этого фреймворка Canvas с такими параметрами, как смещение движения (x,y), и каркас будет добавлять / удалять это смещение к позициям x и y всех объектов, нарисованных на холсте, большинство каркасов рисования Canvas также имеют функцию render()
, которую она периодически вызывает, чтобы в следующий раз рисовать сценурезультаты автоматически отобразятся (в вашем случае, прокручивая виртуальный холст).
Таким образом, все сводится не только к написанию его в качестве плагина jQuery, но и к его привязке к определенной платформе Canvas, например KineticJS илидругие.
Если вы используете базовые функции Canvas вместо какой-либо из этих структур, тогда это другая история, вы можете написать свои собственные функции рендеринга и обновления для холста, но в этом случае это будет ограничиватьпотенциальный пользователь, чтобы придерживаться ограничений вашего DrawIng функции, если вы не предоставляете API для их расширения;но опять же, это означает, что вы пишете свою собственную платформу Canvas:)
Я не уверен, правильно ли я понял вашу проблему, в этом случае вы можете спокойно проигнорировать мой совет :), но если яПравильно, мое мнение будет таким: создание такого плагина потребует также привязки к среде Canvas, чтобы сделать его действительно полезным.
Надеюсь, это поможет.