Javascript HTML 5财富之轮(午餐轮)
我一直在使用HTML5编写一个简单的幸运轮实现表单,但在查找赢家部分时遇到了一些问题,下面是JSFIDLE中的代码:Javascript HTML 5财富之轮(午餐轮),javascript,html,Javascript,Html,我一直在使用HTML5编写一个简单的幸运轮实现表单,但在查找赢家部分时遇到了一些问题,下面是JSFIDLE中的代码: // Called when segments have changed update: function() { // Ensure we start mid way on a item //var r = Math.floor(Math.random() * wheel.segments.length); var r = 0; wheel.an
// Called when segments have changed
update: function() {
// Ensure we start mid way on a item
//var r = Math.floor(Math.random() * wheel.segments.length);
var r = 0;
wheel.angleCurrent = ((r + 0.5) / wheel.segments.length) * Math.PI * 2;
var segments = wheel.segments;
var len = segments.length;
var colors = wheel.colors;
var colorLen = colors.length;
// Generate a color cache (so we have consistant coloring)
var seg_color = new Array();
for (var i = 0; i < len; i++)
seg_color.push(colors[segments[i].hashCode().mod(colorLen)]);
wheel.seg_color = seg_color;
wheel.draw();
}
JSFIDLE中的重要功能:
// Called when segments have changed
update: function() {
// Ensure we start mid way on a item
//var r = Math.floor(Math.random() * wheel.segments.length);
var r = 0;
wheel.angleCurrent = ((r + 0.5) / wheel.segments.length) * Math.PI * 2;
var segments = wheel.segments;
var len = segments.length;
var colors = wheel.colors;
var colorLen = colors.length;
// Generate a color cache (so we have consistant coloring)
var seg_color = new Array();
for (var i = 0; i < len; i++)
seg_color.push(colors[segments[i].hashCode().mod(colorLen)]);
wheel.seg_color = seg_color;
wheel.draw();
}
第256行是当前代码获得赢家的位置:
var i = wheel.segments.length - Math.floor((wheel.angleCurrent / (Math.PI * 2)) * wheel.segments.length) - 1;
但那是在方向盘的右边,我正试图让它成为赢家的一分。我已经为此奋斗了很长时间,我感谢你的帮助或指导。谢谢。解释如下:
首先,我们需要将指针绘制到车轮顶部的正确位置:
drawNeedle: function() {
...
ctx.beginPath();
ctx.moveTo(centerX + 20, centerY - size - 20);
ctx.lineTo(centerX - 20, centerY - size - 20);
ctx.lineTo(centerX , centerY - size + 20);
ctx.closePath();
...
}
在您给出的代码段中:
var i = wheel.segments.length - Math.floor((wheel.angleCurrent / (Math.PI * 2)) * wheel.segments.length) - 1;
wheel.angleCurrent/(Math.PI*2)
部分表示它位于右侧。请注意,在JavaScript中,这就是“单位圆”的起点。要解决这个问题,我们只需要将角度偏移90度(或者在本例中添加Math.PI/2
弧度):
var change=wheel.angleCurrent+(数学PI/2);
变量i=wheel.segments.length-数学地板((更改/(数学PI*2))*wheel.segments.length)-1;
如果(i<0)i=i+17;//17=车轮.节段.长度
计算i
的方式取决于我们从右侧开始。当我们将其从-5更改为12时,它会偏移一些项,而不是从0更改为16。要解决负项(我们的抵消项)的问题,我们只需要将它们添加到13到16。换言之,加上17(这与wheel.segments.length
)相同。你太棒了,:)我想我已经为此奋斗了很久了。谢谢。
var change = wheel.angleCurrent + (Math.PI/2);
var i = wheel.segments.length - Math.floor((change / ( Math.PI * 2)) * wheel.segments.length) - 1;
if(i < 0) i = i + 17; // 17 = wheel.segments.length