使用 class 选择将 javascript 添加到 Wordpress 循环

Add javascript to Wordpress loop with class selection

我想将类别图标添加到 Wordpress 页面,每个图标都带有 snap.svg 动画。

我添加了 "each()" 和 js 的开头,但没有在适当的位置分配动画。我还尝试为 svg 位置添加 double "each()" 并将 snap 对象也添加到 svg,但这也不起作用。

我尝试使用 post-id 为每个 svg 添加唯一的 id,但我无法将 id 从循环内部传递到 js 文件。我经历了在这里和其他地方找到的许多可能的解决方案,但是 none 是适应性强的,因为我的 php 和 js 太差了。

如果你知道我该如何解决这个问题,请回答我。谢谢!

// 这是js代码(稍微修剪了一下,因为路径很长,随机数很多,但其他的都在):

jQuery(document).ready(function(){ 

jQuery(".d-icon").each(function() {

var dicon = Snap(".d-icon");

var dfirepath = dicon.path("M250 377 C"+ ......+ z").attr({ id: "dfirepath", class: "dfire", fill: "none", }); 

function animpath(){  dfirepath.animate({ 'd':"M250 377 C"+(Math.floor(Math.random() * 20 + 271))+ .....+ z" }, 200, mina.linear);};

function setIntervalX(callback, delay, repetitions, complete) { var x = 0; var intervalID = window.setInterval(function () { callback(); if (++x === repetitions) { window.clearInterval(intervalID);  complete();} }, delay); }

var dman = dicon.path("m136 ..... 0z").attr({ id: "dman", class:"dman", fill: "#222", transform: "r70",  }); 

var dslip = dicon.path("m307 ..... 0z").attr({ id: "dslip", class:"dslip", fill: "#196ff1", transform:"s0 0"});

var dani1 = function() { dslip.animate({ transform: "s1 1"}, 500, dani2); }
var dani2 = function() { dman.animate({ transform: 'r0  ' + dman.getBBox().cx + ' ' + dman.getBBox(0).cy, opacity:"1" }, 500, dani3 ); }
var dani3 = function() { dslip.animate({ transform: "s0 0"}, 300); dman.animate({ transform: "s0 0"}, 300, dani4); }
var dani4 = function() { dfirepath.animate({fill: "#d62a2a"}, 30, dani5); } 
var dani5 = function() { setIntervalX(animpath, 200, 10, dani6); }
var dani6 = function() { dfirepath.animate({fill: "#fff"}, 30); dman.animate({ transform: "s1 1"}, 100); } 

dani1();  });  });

我想你的错误在这里:

var dicon = Snap(".d-icon");

您正在将查询 selector 传递给 Snap 构造函数,这意味着 Snap 总是尝试获取具有 class 的第一个 DOM 元素,因此您得到的原因动画放错地方了。

您可以通过两种方式更正:

  1. 在构造函数中声明宽度和高度,例如var dicon = Snap(800, 600);

  2. 由于您使用的是 jQuery,因此您可以使用 $(this) 关键字访问 .each() 中的当前元素。由于您使用的是 jQuery 而不是美元,因此您可以使用 jQuery(this).

请记住这是一个 jQuery 对象,Snap 可能需要一个 DOM 对象。在 jQuery 中,您可以通过在 this 关键字后附加 [0] 来访问 dom 对象。如果 var dicon = Snap( jQuery(this) ); 不起作用,您可以尝试使用 var dicon = Snap( jQuery(this)[0] );

此外,您的代码中有几个 .attr({id : '...', 。我假设您正在尝试将一个不唯一的 ID 关联到路径。这些应该是相对安全的,因为它们位于 SVG 元素内,而且我没有看到您将这些 ID 用于未来 selection.

但是,如果您以后必须 select 那些,我建议在这些后面附加一个数值,这样您就不会发生冲突的 ID 名称。