Как использовать один файл SVG на странице более одного раза

У меня карусель простая сова -

<div id = "header-slider" class = "owl-carousel owl-theme">
    <div class = "single_slide" data-dot='<button role = "button" class = "owl-dot"></button><?php include("inc/chart3.svg")?>'>
       <img src = "assets/images/banner.jpg" alt = "" title = "">
    </div>
    <div class = "single_slide" data-dot='<button role = "button" class = "owl-dot"></button><?php include("inc/chart3.svg")?>'>
        <img src = "assets/images/banner.jpg" alt = "" title = "">
    </div>
</div>

И я пытаюсь включить файл svg (inc / chart3.svg) вместо обычных точек. Проблема в том, что загружается только один файл, а остальные не отображаются. Есть ли способ отобразить каждый файл svg и запустить его анимацию, когда установлен класс «активный»?

У SVG есть этот код:

<svg version = "1.1"  xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" x = "0px" y = "0px"
width = "16" height = "16" viewbox = "0 0 250 250" enable-background = "new 0 0 
426.667 410" xml:space = "preserve">
<path class = "kruznice" transform = "translate(125, 125) scale(.84)"/>
</svg>

<script>
 jQuery(document).ready(function() {
 var kruznice = document.querySelector(".kruznice")
 , a = 0
 , p = Math.PI
 , t = 2;

(function draw() {
a++;
a %= 360;
var r = ( a * p / 180 )
, x = Math.sin( r ) * 125
, y = Math.cos( r ) * - 125
, mid = ( a > 180 ) ? 1 : 0
, anim = "M 0 0 v -125 A 125 125 1 "
+ mid + " 1 "
+  x  + " "
+  y  + " z";
kruznice.setAttribute( "d", anim );
setTimeout(draw, t); // Redraw
})();});
</script>
Поведение ключевого слова "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
0
154
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете загрузить их обоих, и это не проблема.

Проблема в том, что querySelector возвращает только один элемент, и поэтому ваш сценарий применяется только к одному элементу SVG.

Вместо этого используйте getElementsByClassName (который возвращает список объектов), а затем используйте Object.values() для получения каждого элемента SVG, а затем примените свой атрибут для запуска анимации.

$(document).ready(function() {
  var kruznice = document.getElementsByClassName("kruznice"),
    a = 0,
    p = Math.PI,
    t = 2;

  (function draw() {
    a++;
    a %= 360;
    var r = (a * p / 180),
      x = Math.sin(r) * 125,
      y = Math.cos(r) * -125,
      mid = (a > 180) ? 1 : 0,
      anim = "M 0 0 v -125 A 125 125 1 " +
      mid + " 1 " +
      x + " " +
      y + " z";
    Object.values(kruznice).forEach(item=>item.setAttribute("d", anim));
    setTimeout(draw, t); // Redraw
  })();
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<svg version = "1.1" xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" x = "0px" y = "0px" width = "16" height = "16" viewbox = "0 0 250 250" enable-background = "new 0 0 
426.667 410" xml:space = "preserve">
<path class = "kruznice" transform = "translate(125, 125) scale(.84)"/>
</svg>


<svg version = "1.1" xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" x = "0px" y = "0px" width = "16" height = "16" viewbox = "0 0 250 250" enable-background = "new 0 0 
426.667 410" xml:space = "preserve">
<path class = "kruznice" transform = "translate(125, 125) scale(.84)"/>
</svg>

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