Обнаружение события щелчка по стилю значка пера

У меня есть значок пера в приложении vue 3, который я хочу заполнить цветом на основе щелчка. Кажется, что он никогда не принимает значение isHearted как истинное и всегда заполняется черным цветом.

Код:

<template>
    <div @mouseover = "isHearted = true">
      <span class = "info-icon" :class = "{ 'active': isHearted }">
        <i data-feather = "heart" @click = "toggleHeart" fill = "{isHearted ? 'blue' : 'black'}"></i>
      </span>
    </div>
</template>
  
<script>
  import feather from 'feather-icons'
  
  export default {
    components: {
    },
    data() {
      return {
        isHearted: false,
      };
    },

    mounted() {
    feather.replace()
    },

    methods: {
      toggleHeart() {
        this.isHearted = !this.isHearted;
      },
    },
  };
  </script>

Я бы предположил, что feather.replace() манипулирует DOM, поэтому удаляет прослушиватель событий щелчка. Попробуйте поместить прослушиватель в родительский диапазон.

dantheman 31.03.2023 09:03

Я удалил его из значка и вместо этого поместил в родительский диапазон. Он по-прежнему показывает только черный цвет. :(

Appu 31.03.2023 09:07

Работает ли @mouseover на div и заполняет ли его синим цветом?

Adri 31.03.2023 09:11

Я бы также предположил, что встроенная заливка также удаляется. Попробуйте использовать класс active для стилизации внутреннего svg с помощью CSS. Просмотрите значок в браузере, чтобы увидеть, какой HTML-код генерируется для значка, и примените соответствующий стиль.

dantheman 31.03.2023 09:11

@Adri Кажется, прослушиватель событий не работает. Не знаете, где внести изменения, чтобы заставить эти слушатели работать.

Appu 31.03.2023 09:13

@dantheman Но он использует встроенную заливку черного цвета, где значение isHearted равно false (по умолчанию). Это не прослушивание событий.

Appu 31.03.2023 09:14
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
6
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Пожалуйста, попробуйте следующее:

<template>
  <span class = "info-icon" :class = "{ 'active': isHearted }" @click = "toggleHeart">
    <i data-feather = "heart"></i>
  </span>
</template>

<script>
import feather from 'feather-icons'

export default {
  data() {
    return {
      isHearted: false,
    };
  },

  mounted() {
    feather.replace()
  },

  methods: {
    toggleHeart() {
      this.isHearted = !this.isHearted;
    },
  },
};
</script>

<style>
  .info-icon:hover svg, .info-icon.active svg {
    fill: blue;
  }
</style>

Это просто использует CSS для стилизации svg, сгенерированного feather.replace()

Работает. Я тоже сегодня узнал кое-что новое. Большое спасибо! :)

Appu 31.03.2023 09:25

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