0
我新手拉斐尔,我想拉斐尔动画为多个div。目前我有单人div的动画。但我无法为多个div做冲突。拉斐尔动画为多个div
以下是代码
http://tympanus.net/codrops/2011/04/22/animated-skills-diagram/
HTML
<div class="diagram"></div>
<div class="get">
<div class="arc">
<span class="text">JavaScript</span>
<input type="hidden" class="percent" value="95" />
<input type="hidden" class="color" value="#97BE0D" />
</div>
<div class="arc">
<span class="text">CSS3</span>
<input type="hidden" class="percent" value="90" />
<input type="hidden" class="color" value="#D84F5F" />
</div>
</div>
<div class="diagram"></div>
<div class="get">
<div class="arc">
<span class="text">JavaScript</span>
<input type="hidden" class="percent" value="95" />
<input type="hidden" class="color" value="#97BE0D" />
</div>
<div class="arc">
<span class="text">CSS3</span>
<input type="hidden" class="percent" value="90" />
<input type="hidden" class="color" value="#D84F5F" />
</div>
</div>
等等...
JAVASCRIPT
var o = {
init: function(){
this.diagram();
},
random: function(l, u){
return Math.floor((Math.random()*(u-l+1))+l);
},
diagram: function(){
var r = Raphael($('.diagram'),600,600), //need effects for all the div
rad = 3,
defaultText = 'Skills',
speed = 250;
r.circle(300, 300, 20).attr({ stroke: 'none', fill: '#193340' });
var title = r.text(300, 300, defaultText).attr({
font: '12px Arial',
fill: '#fff'
}).toFront();
r.customAttributes.arc = function(value, color, rad){
var v = 3.6*value,
alpha = v == 360 ? 359.99 : v,
random = o.random(91, 240),
a = (random-alpha) * Math.PI/180,
b = random * Math.PI/180,
sx = 300 + rad * Math.cos(b),
sy = 300 - rad * Math.sin(b),
x = 300 + rad * Math.cos(a),
y = 300 - rad * Math.sin(a),
path = [['M', sx, sy], ['A', rad, rad, 0, +(alpha > 180), 1, x, y]];
return { path: path, stroke: color }
}
$('.get').find('.arc').each(function(i){
var t = $(this),
color = t.find('.color').val(),
value = t.find('.percent').val(),
text = t.find('.text').text();
rad += 17;
var z = r.path().attr({ arc: [value, color, rad], 'stroke-width': 12 });
z.mouseover(function(){
this.animate({ 'stroke-width': 20, opacity: .75 }, 1000, 'elastic');
if(Raphael.type != 'VML') //solves IE problem
this.toFront();
title.stop().animate({ opacity: 0 }, speed, '>', function(){
this.attr({ text: text + '\n' + value + '%' }).animate({ opacity: 1 }, speed, '<');
});
}).mouseout(function(){
this.stop().animate({ 'stroke-width': 12, opacity: 1 }, speed*4, 'elastic');
title.stop().animate({ opacity: 0 }, speed, '>', function(){
title.attr({ text: defaultText }).animate({ opacity: 1 }, speed, '<');
});
});
});
}
}
$(function(){ o.init(); });
http://tympanus.net/codrops/2011/04/22/animated-skills-diagram/
我使用arraylist并生成多个div,我如何执行此代码为每个div。请帮助我。谢谢 – Akshay
它看起来不像你使用arrayList。我使用了上面引用的代码,然后在多个地方引用r.circle等,而后面的代码如“$('。get')。find('。arc')。each(”is being used(each means它会通过每一个)为什么不简单地拿他的代码激动地,给每个div像他一样的唯一的id,并改变o.init为id接收一个字符串,将它传递到图函数并调用o.init (“图”); o.init(“图2”);等等,如果你不明白这个代码会更容易 –
再看看它,我的最后一条评论将不会工作,因为代码使用其他班级/编号来查找元素,这意味着所有内容都必须是独一无二的。本网站向人们提出想法和小型解决方案,不是要求人们为你做点什么,我没有时间去调查如果你不了解这些技术,那就不要使用它们或者花时间去学习它们,你需要用类“图表”来循环每个div,并获得每个div通过使用像“div.getElementsByTagName(标记名)”这是一个标准的DOM方法。 as ... –