Nano Hash - криптовалюты, майнинг, программирование

Анимация элементов фильтра feComposite SVG

У меня есть две фигуры svg, одна поверх другой, и я применил фильтр feComposite к обеим, чтобы верхняя фигура выбила часть нижней фигуры. Код выглядит следующим образом и работает нормально.

   <svg width="100" height="100">
    <defs>
       <filter id="myfilter">
         <feImage xlink:href="#layer1" result="lay1"/>
         <feImage xlink:href="#layer2" result="lay2"/>
         <feComposite operator="out" in="lay1" in2="lay2"/>
       </filter>
    </defs>   
    <g filter="url(#myfilter)">
      <circle id="layer1" cx="50" cy="50" r="40" stroke- 
      width="0" fill="green" />
      <circle id="layer2" class="small" cx="20" cy="60" r="20" stroke- 
      width="0" fill="red" />
    </g>
  </svg>

Теперь я хочу анимировать верхнюю фигуру, но когда я попытался применить анимацию, анимируются обе фигуры, и я не могу понять, почему, потому что я нацелился только на вторую фигуру с помощью class="small". Вот код css для анимации.

  @keyframes rock {
    0% {
      transform: rotate(45deg);
    }
    50% {
      transform: rotate(0deg);
    }
    100% {
      transform: rotate(-45deg);
    }
  }

  .small {
    animation-name: rock;
    animation-duration: 5s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
  }

Я озадачен таким поведением и надеюсь, что кто-то может пролить свет на эту проблему. Разве нельзя анимировать элементы svg по отдельности, когда к ним применяются фильтры как к группе? Но это не имеет смысла, потому что элементы svg могут быть настроены индивидуально.

Вот ссылка на codepen: https://codepen.io/lanlanonearth/pen/bGbRyVo


Ответы:


1

Пожалуйста, попробуйте следующее: вы помещаете оба круга в <defs>, а вы <use xlink:href="#layer1". Затем вы применяете фильтр к элементу <use>.

<svg width="100" height="100">
  <defs>
  <circle id="layer1" cx="50" cy="50" r="40" stroke-width="0" fill="green" />
  <circle id="layer2" class="small" cx="20" cy="60" r="20" stroke-width="0" fill="red" />
     <filter id="myfilter">
       <feImage xlink:href="#layer1" result="lay1"/>
       <feImage xlink:href="#layer2" result="lay2"/>
       <feComposite operator="out" in="lay1" in2="lay2"/>
     </filter>
  </defs>   
  <use  xlink:href="#layer1" filter="url(#myfilter)"></use>
</svg>

Проверьте на codepen

30.08.2019
  • Ух ты! Спасибо!!! Мне все еще нужно обдумать логику, стоящую за этим, но большое спасибо за спасение дня! 30.08.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..