Как сделать снимок экрана определенного элемента html div в vue.js

В моем веб-приложении я хочу разрешить пользователю выбирать из списка различных стилей подписи. Когда пользователь выбирает один стиль подписи, я хочу сфотографировать стиль подписи и сохранить его на сервере. Я пробовал использовать библиотеку canvas2html, похоже, она не работает.

Я искал vue-библиотеки, которые могут сфотографировать определенный элемент, но есть только скриншот всей веб-страницы.

mounted() {
    // Element might not have been added to the DOM yet
    this.$nextTick(() => {
        // Element has been definitely added to the DOM
        // is there any way to acces the div element via el element???
    html2canvas(document.getElementById('container')).
        then(function(canvas) {
        document.body.appendChild(canvas);
       });
       console.info(this.$el.textContent); // I'm text inside the component.
        });
      }

В чем проблема? Этот код отлично работает, чтобы скопировать элемент контейнера и воссоздать его на холсте.

Steven B. 08.04.2019 18:37

я пытался использовать github.com/mycure-inc/vue-html2canvas эту библиотеку. всякий раз, когда я добавляю импорт VueHtml2Canvas из 'vue-html2canvas'; Vue.use(VueHtml2Canvas); ------------------ Это приводит к этой ошибке в веб-пакете --------------------------- --Uncaught ReferenceError: regeneratorRuntime не определен

Sidra Tariq 08.04.2019 18: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) для оценки ваших знаний,...
0
2
4 852
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Пробую библиотеку html2canvas, вроде работает нормально.

Сначала убедитесь, что вы уже установили библиотеку:

npm install html2canvas

И в компоненте:

async mounted () {
  let el = this.$refs.hello.$el; // You have to call $el if your ref is Vue component
  this.output = (await html2canvas(el)).toDataURL();
}

Живой пример

Если вы уже используете vue-html2canvas, вы можете сделать так:

async mounted() {
  let el = this.$refs.hello.$el;
  let options = { type: "dataURL" };
  this.output = await this.$html2canvas(el, options);
}

Живой пример

Примечание. Кажется, у vue-html2canvas есть проблема с babel, см. Время выполнения регенератора Babel 6 не определено, чтобы узнать, как это исправить (в моем примере я просто импортирую "regenerator-runtime/runtime").

Спасибо!!! codeandbox.io/s/r7n9qmlxmo у меня работает. асинхронный монтаж () { let el = this.$refs.hello.$el; console.info(this.$refs+"значение моей ссылки") console.info(el+"значение моей ссылки") } можете ли вы сказать мне, почему мы используем хук жизненного цикла асинхронного монтирования. У меня есть несколько подписей, из которых пользователь может выбирать, поэтому у меня будет несколько ссылок. когда я получаю доступ к одной ссылке из нескольких ссылок. ссылка дает мне undefined.

Sidra Tariq 09.04.2019 17:57

Я использую async mount только для примера. Я создаю codeandbox.io/s/31z1vj7815 на основе клика пользователя. $ref может быть неопределенным из-за того, что элемент еще не визуализирован (возможно, из-за рендеринга условия, такого как v-if).

User 28 09.04.2019 19:19

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