Javascript 使用jQuery绘制椭圆形状的div
我的数学似乎不足以完成当前的任务,所以我想寻求帮助。主要的问题解决了,我以省略号的形式显示div,但我无法解决如何注意div的尺寸。当前的解决方案适用于等边的形状,但我的div不是这样的,它们的宽度大于高度 当前函数如下所示:Javascript 使用jQuery绘制椭圆形状的div,javascript,jquery,math,Javascript,Jquery,Math,我的数学似乎不足以完成当前的任务,所以我想寻求帮助。主要的问题解决了,我以省略号的形式显示div,但我无法解决如何注意div的尺寸。当前的解决方案适用于等边的形状,但我的div不是这样的,它们的宽度大于高度 当前函数如下所示: function drawEllipse(selector, x, y, a, b, angle) { var steps = jQuery(selector).length; var i = 0; var beta = -angle * (Math.PI / 180);
function drawEllipse(selector, x, y, a, b, angle) {
var steps = jQuery(selector).length;
var i = 0;
var beta = -angle * (Math.PI / 180);
var sinbeta = Math.sin(beta);
var cosbeta = Math.cos(beta);
jQuery(selector).each(function(index) {
var alpha = i * (Math.PI / 180);
i += (360 / steps);
var sinalpha = Math.sin(alpha);
var cosalpha = Math.cos(alpha);
var X = x + (a * sinalpha * cosbeta - b * cosalpha * sinbeta);
var Y = y - (a * sinalpha * sinbeta + b * cosalpha * cosbeta);
X = Math.floor(X);
Y = Math.floor(Y);
//again, here's where the important X and Y coordinates are being output
jQuery(this).css('margin-top', Y + 'px');
jQuery(this).css('margin-left', X + 'px');
});
}
提前谢谢。与其用
边距
抵消div,不如用位置:绝对
?然后你可以把它们放在你想要的地方
您可以将其与div宽度和高度的一半的负边距相结合,使其位于该位置的中心
演示:我可以通过以下方式使您的代码正常工作(出于非常不同的原因需要它): 注意位置:绝对,如另一张海报所示 我的补充呼叫代码如下,仅供参考:
var x, y;
var pos = $('#ringwrapper').position();
x = pos.left;
y = pos.top;
console.log(x + " : " + y);
this.drawEllipse($('#ringwrapper'), x + (this.ringSize.width / 2.85),
y + (this.ringSize.height / 3.1), 235, 350, 90);
你可以使用Raphael…你能告诉我们HTML代码以及如何调用
drawerlipse
(或设置JSFIDLE)?这就像Jeff B在下面做的一样你是对的,但这不能解决我的问题。我的意思是,如果你调用函数,目标div宽度是用于100px的,并且它们的高度是50px,那么你会看到,在ELIPSIS的上、下部分,div彼此重叠,但是在中间部分之间有一组不必要的空间。所以关键是要在元素之间实现相等的间距。这实际上有点复杂,特别是因为很多元素更像是“看起来正确”的东西,而不是计算的东西。例如,如果两个div是对角的,如何将它们隔开?距离最近点的对角线距离?水平距离和垂直距离?这些方法中的每一种在椭圆的某个部分看起来都是错误的。如果你的div都是圆,那就很容易了……而且,由于椭圆更斜,或者更确切地说,随着长轴和短轴的移动距离越来越远,即使div的尺寸相同,点在“宽”边上的距离也会越来越远,在窄端上的距离会越来越近。需要一个不同的参数方程才能使它们在椭圆周围均匀分布,所以这确实是一项艰巨的任务。我唯一的想法是,在这种情况下,我们将省略号分成x等分,其中x等于div的数量。所以我想,也许解决方案是,如果我把省略部分分成x*10等分,然后把divs分布成一个函数(比如sin()函数),实际上在我的例子中,你不必担心省略的角度,它被设置为0。
.ellipsemarker {
background-color: #fff;
border: #e8e8e8 2px solid;
width: 15px;
height: 10px;
position: absolute;
}
var x, y;
var pos = $('#ringwrapper').position();
x = pos.left;
y = pos.top;
console.log(x + " : " + y);
this.drawEllipse($('#ringwrapper'), x + (this.ringSize.width / 2.85),
y + (this.ringSize.height / 3.1), 235, 350, 90);