我刚刚开始了一个小项目,用svg和jQuery测试动画,并且已经开始动态创建rect。但是,我的代码中出现了问题,因为即使我可以在Inspector中看到创建的svg元素,也不会在浏览器中看到它们。
为什么会这样,我可以改变什么才能看到矩形?我在Chrome,Firefox和Safari中尝试了这些代码。
jsFiddle:http://jsfiddle.net/JFACW/
JS:
$(document).ready(function() {
var NR_OF_FLAKES = 100,
flake = $('.flake'),
x = flake.attr('x'),
y = flake.attr('y'),
svg = $('#svg');
for(var i = 0; i < NR_OF_FLAKES; i++) {
var xPos = randomize('width'),
yPos = randomize('height');
$('svg').append('<rect class="flake" width="5" height="5" x=' + xPos + ' y=' + yPos + '/>');
}
flake.attr('x');
var height = $(window).height();
function randomize(direction) {
if (direction == 'width')
direction = $(window).width();
else
direction = $(window).height();
var rand = Math.floor((Math.random() * direction) + 1);
return rand;
}
});
HTML:
...
<body>
<div id="box2">
<svg id="svg" xmlns="http://www.w3.org/2000/svg" height="1600" version="1.1"></svg>
</div>
</body>
...
的CSS:
rect.flake {
fill: rgb(255,205,0);
}
答案 0 :(得分:2)
放弃jQuery并转向纯粹的javascript:
var NR_OF_FLAKES = 100,
svg = document.querySelector('svg'),
xmlns = "http://www.w3.org/2000/svg";
for(var i = 0; i < NR_OF_FLAKES; i++) {
var xPos = Math.random()*window.innerWidth,
yPos = Math.random()*window.innerHeight,
flake = document.createElementNS(xmlns, "rect");
flake.setAttribute("width", 5);
flake.setAttribute("height", 5);
flake.setAttribute("x", xPos);
flake.setAttribute("y", yPos);
flake.setAttribute("class", "flake");
svg.appendChild(flake);
}
答案 1 :(得分:1)
这是jquery's append not working with svg element?
的副本 SVG没有innerHTML
,因此.append
不起作用。有关详细信息,请参阅链接的问题。
编辑:这可能不完整。 jQuery似乎附加了不在SVG名称空间中的rect
元素,但它们必须是。