tl;博士
这是一个 jsFiddle,它可以做我认为你想要的:点击.
解释
实际上这很容易,因为您可以通过知道它的 x 坐标和该线所经过的两个点来计算一条线上的任何点:
// A line, defined by two coordinates
var s = {x: 0.0, y: 0.0}; // Start
var e = {x: 300.0, y: 100.0}; // End
var distance = (e.x - s.x)
var slope = (e.y - s.y) / distance
一旦你有了斜率,你可以通过简单地将它的 x 坐标与斜率相乘来计算线上的任何“y”:
var step = 32; // Calculate y-coordinate every 32 units
for(var x=0; x<distance; x+=step) {
var y = x * slope;
console.log(s.x + x, s.y + y);
// The next snippet goes here ↓
}
有了它,剩下的就是复制图像(或其他 DOM 对象)并将其定位在这些坐标处:
image.clone().appendTo(stage).css({
left: (s.x + x-imageWidth/2) + "px",
top: (s.y + y-imageHeight/2) + "px"
})
该-imageWidth/2
部分用于将图像置于线上的中心。否则,图像的左上角将被定位在那里。此外,此方法依赖于您指定相对于其父容器偏移量的坐标这一事实,该偏移量必须具有该position: relative
属性。position: absolute
正如@Eru 的评论所建议的那样,您使用此技术定位的每个元素都必须有一个。