首先让我来描述一下我正在捣乱的项目。英语不是我的外语所以我不知道我要找的效果的确切名称。
基本上我正在创建宾果游戏类型,主持人可以按下按钮启动宾果轮。最终轮子会停下来,它所落下的单词就是那一轮的选定单词。之后,这个词从游戏中移除,游戏一遍又一遍地开始,直到有人叫宾果。
我开始玩一些JSON数据,以及如何从数组等中删除项目,这很容易。但现在是我最喜欢的部分。我必须创建一种功能,滚动所有选项,如一定速度的轮子,最终速度降低,因此它将落在所选的单词上。我用我现在的代码创建了一个小提琴。请注意,它纯粹是为了功能而非外观而创建的!
var json = {
"titles": [
"PLACEHOLDER_1",
"PLACEHOLDER_2",
"PLACEHOLDER_3",
"PLACEHOLDER_4",
"PLACEHOLDER_5",
"PLACEHOLDER_6",
"PLACEHOLDER_7",
"PLACEHOLDER_8",
"PLACEHOLDER_9",
"PLACEHOLDER_10",
"PLACEHOLDER_11",
"PLACEHOLDER_12",
"PLACEHOLDER_13",
"PLACEHOLDER_14",
"PLACEHOLDER_15"
]
}
$(document).ready(function() {
var app = new Bingo.init();
})
var Bingo = {
viewport: {
isMobile: 0,
isTablet: 0,
isDesktop: 1,
device: 'desktop',
browser: null
}
}
Bingo.init = function() {
Bingo.gameController.init();
};
Bingo.gameController = {
gameNames: {},
init: function() {
Bingo.gameController.general.saveJson();
$('.test').on('click', Bingo.gameController.array.pickRandomNumber)
},
general: {
saveJson: function() {
Bingo.gameController.gameNames = json.titles;
},
//General reset function
resetGame: function() {
Bingo.gameController.general.saveJson;
}
},
array: {
pickRandomNumber: function() {
//reset gamefield
Bingo.gameController.game.buildGame();
var gameNames = Bingo.gameController.gameNames;
var totalNames = gameNames.length;
//Pick a random number
var chosenNumber = Math.floor(Math.random() * totalNames);
Bingo.gameController.array.remove(chosenNumber)
},
remove: function(id) {
//remove chosen name from array
var gameNames = Bingo.gameController.gameNames;
var check = gameNames.indexOf(gameNames[id]);
Bingo.gameController.game.highlightName(id);
if (check != -1) {
gameNames.splice(check, 1);
Bingo.gameController.gameNames = gameNames;
}
}
},
game: {
buildGame: function() {
//build all the array entry's into the div
$('.page.main-game').empty();
var gameNames = Bingo.gameController.gameNames;
for (var i = 0; i < gameNames.length; i++) {
var item = '<div class="name-item" data-id="' + i + '">' + gameNames[i] + '</div>';
$('.page.main-game').append(item);
}
},
highlightName: function(id) {
//highlight the chosen number red
$('.name-item[data-id="' + id + '"]').css('color', 'red');
}
}
}
Fiddle link here (我希望链接是正确的,不要那么多使用小提琴)
所以现在当你再次点击“再玩”时按钮你看到它会突出显示一个单词。必须发生的是当我再次按下播放按钮时,红色高亮必须从第一个div到最后一个等等,直到它最终停在一个div(用随机数或其他东西选择)。
如果有人可以帮我这个或者可以给我一个正确方向的提示,请告诉我!
EXTRA:应用程序最终会看起来像打开选择框时iphone获得的滚轮(希望你知道我指的是什么)。所以这就是为什么它的命运之轮效应。如果有人可以为我提供正确的名称,请告诉我,以便我可以调整标题!
如果缺少任何信息,请告诉我,我很乐意提供!谢谢!!
答案 0 :(得分:3)
基本思路是(1)来保持当前索引,因此您可以每次从该索引开始旋转,其中'spining'只是增加该索引或在到达时设置为零最大指数;并且(2)为下一个绘画设置超时,并且每次都减少超时,直到它足够低。
<强> HTML 强>
<p><button onclick="w.spin(w.randomNext(), 8)">SPIN</button></p>
<ul id='wheel'>
<li>$100</li>
<li>$250,000</li>
<li>$25,000</li>
<li>$10,000</li>
<li>$1,000</li>
<li>$5</li>
<li>$2,000</li>
<li>30,000</li>
<li>$40</li>
</ul>
<强>的JavaScript 强>
var wheelEl = document.getElementById('wheel');
function Wheel () {
this.current = 4;
}
Wheel.prototype.init = function () {
this.onItem();
}
Wheel.prototype.randomNext = function () {
return Math.floor(Math.random() * wheelEl.children.length);
}
Wheel.prototype.spin = function (next, itemsPerSecond) {
var timeout = setTimeout(onItem.bind(this), (1 / itemsPerSecond) * 1000);
function onItem () {
// stop if speed is low enough
if (itemsPerSecond < 1)
return;
// spin to next item
this.current ++;
if (this.current >= wheelEl.children.length)
this.current = 0;
// paint text
this.onItem();
// reduce speed
clearTimeout(timeout);
itemsPerSecond--;
timeout = setTimeout(onItem.bind(this), (1 / itemsPerSecond) * 1000);
}
}
// paints the index of this.current
Wheel.prototype.onItem = function () {
for (var i = 0 ; i < wheelEl.children.length ; i++)
wheelEl.children[i].style.color = (i == this.current) ? '#6d4321' : '#000000';
}
var w = new Wheel();
w.init();