html5 球形选择,HTML5/SVG使用D3.js构建的随机球形(球幕)照片墙

本文介绍了一种使用JavaScript库D3.js来创建动态球形照片墙的方法。通过D3的布局和力导向图,结合JSON数据,实现了节点的动态位置调整,每个节点代表一张照片,并能响应用户的交互。文章中详细展示了如何处理数据、设置图形参数以及应用图像和圆圈元素。
摘要由CSDN通过智能技术生成

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

//可用于构造球形照片墙

var format = d3.format(",d");

var bubble = d3.layout.pack()

.sort(null)

.size([960, 960])

.value(function(d) {

return d.trackers;

})

.padding(10);

var svg = d3.select('body')

.append('svg')

.attr("width", 960)

.attr("height", 960)

.attr("class", "bubble")

d3.json("/uploads/161001/popular.json", function(error, data) {

data = data.map(function(d) {

d.trackers = +d.trackers;

return d;

});

var nodes = bubble.nodes({

children: data

}).filter(function(d) {

return !d.children;

});

var force = d3.layout.force()

.nodes(nodes)

.links([])

.charge(-400)

.gravity(0.2)

.friction(0.8)

.size([960, 960])

.on("tick", tick);

force.start()

var node = svg.selectAll(".node")

.data(nodes)

.enter().append("g")

.attr("class", "node")

.attr("transform", function(d) {

return "translate(" + d.x + "," + d.y + ")";

})

.call(force.drag);

node.append("svg:image")

.attr('width', function(d) {

return d.r * 2;

})

.attr('height', function(d) {

return d.r * 2;

})

// .attr('width', 20)

// .attr('height', 20)

.attr('x', function(d) {

return -d.r;

})

.attr('y', function(d) {

return -d.r;

})

.attr('xlink:href', function(d) {

return "/uploads/160101/fashion/thumbs/" + Math.floor(d.rank / 20) + ".jpg";

})

node.append("circle")

.attr('r', function(d) {

return d.r;

})

.attr("cx", function(d) {

return d.cx;

})

.attr("cy", function(d) {

return d.cy;

});

function tick(e) {

var k = .1 * e.alpha;

nodes.forEach(function(o, i) {

o.y += (480 - o.y) * k;

o.x += (480 - o.x) * k;

});

node.attr("transform", function(d) {

return "translate(" + d.x + "," + d.y + ")";

});

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值