我做了以下小提琴,其中一个列表中的单词可以拖放到另一个列表中,反之亦然。
拖放代码非常简单。
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("Text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
并且每个单词都有draggable="true"
虽然两个div都有ondrop="drop(event)" ondragover="allowDrop(event)"
现在,我需要一个函数来重排每个列表中的单词。
基本上,单击一个按钮时,它应调用一个函数,该函数将随机播放列表中的单词。老实说,我不知道如何做到这一点。我在考虑使用Javascript'
var input = a.getElementsByTagName('span')
其中,在我的小提琴中,<span>
包含每个单独的单词。
与此同时,我想知道它是否与此question相似。如果是的话,有人可以帮我解决当前问题。
感谢。
答案 0 :(得分:2)
使用真棒underscorejs或lodash。这些库为javascript提供了实用程序功能,它提供了许多好的功能。
现在要洗牌,这样做:
// your array
myWordArray = [...]
$('.shuffle').click(function {
myWordArray = _.shuffle(myWordArray);
}
答案 1 :(得分:2)
使用以下shuffle
功能:How can I shuffle an array?
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
}
使用jQuery
的示例:
http://jsfiddle.net/trevordowdle/E4qzS/11/
$('#shuffle').click(function(){
var spanArray = [];
$('[id^=div]').each(function(){
spanArray.length = 0;
$(this).find('span').each(function(){
spanArray.push($(this));
});
spanArray = shuffle(spanArray);
$(this).empty();
for(var i = 0;i<spanArray.length;i++)
$(this).append(spanArray[i]);
});
});
答案 2 :(得分:1)
如果你想使用简单的JavaScript,你可以这样做:
向HTML添加随机播放按钮:
<button id='btn-shuffle'>SHUFFLE</button>
将这些功能添加到JS:
function shuffleNodes(parent) {
var nodes = parent.childNodes;
var arr = [];
for(var i = 0; i < nodes.length; i++) {
arr.push(nodes[i]);
}
arr.sort(function() {
return Math.random() < 0.5 ? -1 : 1;
});
parent.innerHTML = '';
for(var j = 0; j < arr.length; j++) {
parent.appendChild(arr[j]);
}
}
document.getElementById('btn-shuffle').addEventListener('click', function() {
shuffleNodes(document.getElementById('div1'));
shuffleNodes(document.getElementById('div2'));
});