Как добавить больше изображения при переходе изображения с помощью фильтров SVG? - PullRequest
0 голосов
/ 11 мая 2018

Я использую этот код для перехода между изображениями. Мне нужно добавить еще 4 изображения. Но я не могу найти это. Как добавить больше изображений в этот переход изображения с помощью фильтров SVG? Также как контролировать скорость перехода? Это облегчает переход на домашнюю страницу. Поэтому я хочу добавить еще 4 изображения.

<DOCTYPE! html>
<html>
<head>
  <meta charset="utf-8" />
    <meta name="robots" content="index, follow">
    <meta name="keywords" content="">
    <meta name="description" content=""/>
    <title>AC</title>
  </head>
<body>
  <svg width="1600px" height="800px">
<defs>
  <filter id="turbulent-dissolve" x="0%" y="0%">
  <feTurbulence type="fractalNoise" baseFrequency=".012"/>
   <feColorMatrix type="luminanceToAlpha"/>
   <feComponentTransfer>
      <feFuncA type="linear" slope="0">
        <animate attributeName="slope" values="0;0;0;0;0;0.5;1;1.5;2;2;2;2;2;2;1.5;1;0.5;0" dur="8s" repeatCount="indefinite"/>
     </feFuncA>
    </feComponentTransfer>
    
    <feComponentTransfer>
      <feFuncA type="discrete" tableValues="0 1"/>
    </feComponentTransfer>
     <feGaussianBlur stdDeviation="1"/>
    <feComposite operator="in" in="SourceGraphic" result="overlay"/>
    
    <feImage xlink:href="https://ykob.github.io/glsl-dissolve/img/osaka02.jpg" width="800" height="600" result="underlay"/>
    <feComposite operator="over" in="overlay" in2="underlay"/>
  </filter>
  </defs>

  
  <image filter="url(#turbulent-dissolve)" width="800" height="600" xlink:href="https://ykob.github.io/glsl-dissolve/img/osaka01.jpg"/>
  
</svg>
</body>
</html>

Как добавить больше изображений в этот переход изображений с помощью фильтров SVG?

1 Ответ

0 голосов
/ 11 мая 2018

Не удивительно, что у вас были проблемы с пониманием, как эта штука работает. Сроки были скрыты в списке слишком сложных значений. Сначала рассмотрим элемент <animate> для функции фильтра <feFuncA>. Чтобы перейти от одного изображения к следующему, нужно изменить атрибут slope с 0 на 2. Напишите его так:

<animate attributeName="slope" repeatCount="indefinite"
         values="0;0;2" keyTimes="0;0.4;1" dur="5s" />

dur="5s" определяет полное время, которое занимает анимация. Список keyTimes называет три момента времени: 0 равняется 0 с, 0,4 равняется 2 с, а 1 равняется 5 с. (Первое значение должно быть 0, а последнее - 1.) Для этих моментов времени список values содержит значения для атрибута slope. Между 0 и 2 значение остается равным 0, что означает, что изображение, названное в элементе <feImage>, остается видимым. Между 2 и 5 секундами изображение непрерывно переходит к тому, который указан в элементе <image> ниже. После этого анимация снова возвращается к первому изображению и повторяется. (Вы должны быть в состоянии выяснить, как изменить эти значения для других таймингов.)

Теперь, чтобы получить больше отображаемых изображений, вы можете сделать это: в тот момент, когда анимация возвращается к первому изображению, вы меняете <feImage> на то, что только что было перемещено, и меняете то, которое будет показано следующим <image>. Эта анимация выглядит так:

<feImage xlink:href="" width="800" height="600" result="underlay">
  <animate attributeName="xlink:href" repeatCount="indefinite"
           values="url1;url2;url3;url4" dur="20s" />
</feImage>

Обратите внимание, что значение dur теперь составляет 20 с, что в четыре раза превышает длительность анимации перехода для четырех изображений, поэтому обмен изображениями происходит каждые 5 секунд.

Анимация для элемента <image> выглядит так же, но перечисляет изображения, начинающиеся со второго URL.

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1600px" height="800px">
<defs>
  <filter id="turbulent-dissolve" x="0%" y="0%">
  <feTurbulence type="fractalNoise" baseFrequency=".012"/>
   <feColorMatrix type="luminanceToAlpha"/>
   <feComponentTransfer>
      <feFuncA type="linear" slope="0">
        <animate attributeName="slope" repeatCount="indefinite"
                 values="0;0;2" keyTimes="0;0.4;1" dur="5s" />
     </feFuncA>
    </feComponentTransfer>
    
    <feComponentTransfer>
      <feFuncA type="discrete" tableValues="0 1"/>
    </feComponentTransfer>
     <feGaussianBlur stdDeviation="1"/>
    <feComposite operator="in" in="SourceGraphic" result="overlay"/>
    
    <feImage xlink:href="" width="800" height="600" result="underlay">
      <animate attributeName="xlink:href" repeatCount="indefinite"
               values="https://ykob.github.io/glsl-dissolve/img/osaka01.jpg;
                       https://ykob.github.io/glsl-dissolve/img/osaka02.jpg;
                       https://ykob.github.io/glsl-dissolve/img/osaka03.jpg;
                       https://ykob.github.io/glsl-dissolve/img/osaka04.jpg"
               dur="20s" />
</feImage>
    <feComposite operator="over" in="overlay" in2="underlay"/>
  </filter>
  </defs>

  
  <image filter="url(#turbulent-dissolve)" width="800" height="600" xlink:href="">
    <animate attributeName="xlink:href" repeatCount="indefinite"
             values="https://ykob.github.io/glsl-dissolve/img/osaka02.jpg;
                     https://ykob.github.io/glsl-dissolve/img/osaka03.jpg;
                     https://ykob.github.io/glsl-dissolve/img/osaka04.jpg;
                     https://ykob.github.io/glsl-dissolve/img/osaka01.jpg"
             dur="20s" />

</svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...