html 转盘 自定义格数 点击转动 根据传入角度停止到指定位置
时间: 2023-09-12 10:12:54 浏览: 755
Android实现可点击的幸运大转盘
要实现自定义格数、点击转动并停止到指定位置的 HTML 转盘,你可以通过以下步骤进行:
1. 在 HTML 中添加一个 input 元素,用于输入格数和目标角度。
2. 在 JavaScript 中获取输入的格数和目标角度。
3. 根据格数计算出每个色块的角度,并绘制转盘。
4. 绑定点击事件,生成随机旋转角度并绑定动画效果,同时记录当前旋转总角度。
5. 每次旋转完成后,计算当前旋转总角度,并检查是否达到目标角度。
6. 如果达到目标角度,停止动画并弹出提示框,否则继续旋转。
以下是一个自定义格数、点击转动并停止到指定位置的 HTML 转盘代码示例:
```html
<!DOCTYPE html>
<html>
<head>
<title>HTML 转盘</title>
<style>
canvas {
border: 1px solid #ccc;
margin: 20px auto;
}
</style>
</head>
<body>
<label for="sectors">请输入格数:</label>
<input type="number" id="sectors" min="2" max="10" value="6">
<label for="angle">请输入目标角度:</label>
<input type="number" id="angle" min="0" max="360" value="0">
<canvas id="canvas" width="400" height="400"></canvas>
<script>
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var inputSectors = document.getElementById("sectors");
var inputAngle = document.getElementById("angle");
var sectors = parseInt(inputSectors.value);
var angle = parseInt(inputAngle.value);
var totalAngle = 0;
inputSectors.onchange = function() {
sectors = parseInt(inputSectors.value);
draw();
};
inputAngle.onchange = function() {
angle = parseInt(inputAngle.value);
};
function draw() {
// 计算每个色块的角度
var sectorAngle = 2 * Math.PI / sectors;
// 画一个圆形
ctx.beginPath();
ctx.arc(200, 200, 180, 0, 2 * Math.PI);
ctx.fillStyle = "#fff";
ctx.fill();
// 添加色块
var colors = ["#f00", "#0f0", "#00f", "#ff0", "#f0f", "#0ff"];
for (var i = 0; i < sectors; i++) {
ctx.beginPath();
ctx.moveTo(200, 200);
ctx.arc(200, 200, 160, i * sectorAngle, (i + 1) * sectorAngle);
ctx.fillStyle = colors[i % colors.length];
ctx.fill();
}
}
function rotate() {
// 生成随机旋转角度
var randomAngle = Math.random() * 360;
var rotate = "rotate(" + randomAngle + "deg)";
// 绑定动画效果
canvas.style.transition = "transform 3s ease-out";
canvas.style.transform = rotate;
// 记录当前旋转总角度
totalAngle += randomAngle;
// 每次旋转完成后检查是否达到目标角度
if (totalAngle >= angle) {
canvas.style.transition = "";
canvas.style.transform = "rotate(" + (angle - (totalAngle - randomAngle)) + "deg)";
alert("恭喜你,获得了 " + colors[Math.floor(angle / (360 / sectors)) % colors.length] + " 奖品!");
} else {
setTimeout(rotate, 3000);
}
}
draw();
canvas.onclick = rotate;
</script>
</body>
</html>
```
你可以将上述代码复制到一个 HTML 文件中并打开,即可看到一个自定义格数、点击转动并停止到指定位置的 HTML 转盘。注意,输入的格数必须在 2-10 的范围内,输入的目标角度必须在 0-360 的范围内。
阅读全文