Как интегрировать этот код CodePen в Vue?

Я пытаюсь реализовать это (https://codepen.io/iprodev/pen/azpWBr) в Vue. Как я могу это сделать?

Я попытался реализовать это так

<template>
    <div>
        <canvas height = "100" id = "confetti" width = "100"></canvas>
     </div>
</template>

<script>
    export default {
        created () {
            // JS code from codepen
        }
    }
</script>

здесь используется только холст, я не вижу необходимости в vue

apple apple 28.12.2018 09:22

У меня уже есть веб-приложение, построенное на Vue. Я хочу реализовать это в этом приложении.

SamiulHSohan 28.12.2018 09:28

Что делает код CodePen и какие проблемы конкретно возникают при интеграции?

halfer 28.12.2018 09:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
320
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Конечно, это выполнимо. Вам нужно сделать несколько вещей. Весь код во фрагменте кода Codepen заключен в обработчик событий DOMContentLoaded, поскольку вам нужен доступ к фактическому дереву DOM. С Vue вы не можете использовать это событие, поскольку приложения Vue являются SPA, и загруженное событие будет запущено задолго до того, как ваше фактическое представление будет отрисовано.

В этом случае следует использовать событие mounted вместо события жизненного цикла компонента created. mounted гарантирует, что DOM компонента действительно прикреплена к основному документу.

Далее вам понадобится доступ к самому HTMLCanvasElement. Вместо того, чтобы искать его по идентификатору, ваша конструкция Vue.js $refs выглядит следующим образом:

<canvas ref = "confetti" height = "100" width = "100"></canvas>

Затем внутри вашего компонента вы можете получить доступ к элементу DOM как:

mounted() {
    this.$refs.confetti // Reference to HTMLCanvasElement
}

Вот как вы избегаете использования глобальных атрибутов id с Vue.js. Теперь остальная часть кода - это то, как вы хотите организовать его внутри своего компонента. Вы можете выделить логику рендеринга холста в отдельный модуль и передать элемент Canvas, иначе методы могут стать частью экземпляра Vue.

Третий и последний. Есть несколько обработчиков событий, назначенных объекту window, например resize. Вы должны убедиться, что очищаете их, когда компонент разрушается. Если вы этого не сделаете, то даже если компонент будет уничтожен, эти события будут продолжать запускать обработчики. Для этого используйте событие жизненного цикла beforeDestroy, предоставленное Vue. Очистите все ваши глобально зарегистрированные обработчики событий.

Вот демонстрация, реализующая предложения @Harshal: кодовый ключ

tony19 28.12.2018 10:06

Есть ли способ остановить анимацию? Может, изящно? Я хочу нажать кнопку, и конфетти перестанет падать и исчезнет с экрана.

Connie DeCinko 24.12.2019 17:07

Другие вопросы по теме