function fCreateOption(){
var dv = document.createElement("<div>");
dv.style.styleFloat = "left";
//dv.style.display = "none";
dv.id = "dvOption";
document.body.appendChild(dv);
dv.appendChild(fGetTable(CONTAINW, CONTAINW, cWidth, "myTb1"));
myTb1.style.marginLeft = "5px";
dv.appendChild(document.createElement("<span id='Score' style='margin-top:10px;display:block;margin-left:5px;'></span>"));
dv.appendChild(document.createElement("<input type='button' value='重新开始' onclick='fRestart();this.blur();' style='margin-top:10px;display:block;margin-left:5px;'>"));
dv.appendChild(document.createElement("<input type='button' value='高级选项' onclick='fShowHideAdvance();this.blur();' style='margin-top:10px;display:block;margin-left:5px;'>")); var dv = document.createElement("<div>");
dv.style.styleFloat = "left";
dv.style.border = "1px solid #cccccc";
dv.style.display = "none";
dv.id = "dvAdvance";
document.body.appendChild(dv);
dv.appendChild(document.createElement("<input type='button' value='录制片头' onclick='fRecordMovie(\"start\")' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='录制片尾' onclick='fRecordMovie(\"end\")' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='显示现有的元素' onclick='fDisplayElement()' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='自定义元素' onclick='fDefineElement()' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='清空' onclick='fCleanTable()' style='margin:3px'>"));
}
function fCleanTB(){
sRecordElement = '';
var tdList = win.document.getElementsByTagName('TD');
for(var i=0;i<tdList.length;i++)
tdList[i].bgColor='#ffffff'
}
function fDefineElement(){
try{win.close();} catch(e){}
win = window.open("",null,"height=150,width=150,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes");
win.document.body.innerHTML = "";
var tb = fWinGetTable(win,CONTAINW, CONTAINW, cWidth*2, "");
win.document.body.innerHTML = "";
win.document.body.appendChild(tb);
win.document.body.appendChild(win.document.createElement("<input type='button' value='清空' onclick='opener.fCleanTB()' style='margin:3px'>"));
win.document.body.appendChild(win.document.createElement("<input type='button' value='加入' onclick='opener.fRecordElement()' style='margin:3px'>"));
win.document.onclick = function(){
if(win.event.srcElement.tagName == 'TD'){
win.event.srcElement.bgColor = bgColor;
rAndc =win.event.srcElement.parentNode.rowIndex + '^' + win.event.srcElement.cellIndex;
if(sRecordElement.indexOf(rAndc)<0) sRecordElement += ((sRecordElement=='')?rAndc:('\,'+rAndc));
}
}
}
function fDisplayElement(){
win = window.open("",null,"height=200,width=150,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes");
win.document.write("<script>function HeyBeClose(obj){if(obj.nextSibling) {if(obj.nextSibling.tagName=='DIV') {obj.nextSibling.value = parseInt(obj.nextSibling.value,10)-1;} HeyBeClose(obj.nextSibling)}}<\/script><body><\/body>");
for(var i=0;i<arrEls.length;i++){
var el = arrEls[i].el;
var tb = fWinGetTable(win,CONTAINW, CONTAINW, cWidth*2, i);
win.document.body.appendChild(tb);
var dv = win.document.createElement("<div value="+ i +" style='margin:5px;cursor:hand;' onclick='opener.arrEls.splice(this.value,1); HeyBeClose(this); document.body.removeChild(this.previousSibling); document.body.removeChild(this);'>");
dv.innerHTML = "删除";
win.document.body.appendChild(dv);
for(var j=0;j<el.length;j++){
if(el[j].status) tb.rows[el[j].r].cells[el[j].c].bgColor = bgColor;
}
}
}
// ============= HTML标签构造结束 ===========
// ============= 元素结构函数开始 ===========
function fGetElements(str){
var arr = str.split(",");
var arrElement = new Array();
for(var i=0;i<CONTAINW;i++){
for(var j=0;j<CONTAINW;j++){
for(var k=0;k<arr.length;k++){
if(arr[k].split("^")[0] == j && arr[k].split("^")[1] == i){
arrElement[arrElement.length] = new fGetElement(j, i, true);
break;
}
if(k == arr.length-1) arrElement[arrElement.length] = new fGetElement(j, i, false);
}
}
}
return arrElement;
}
function ElContain(el, pct){
this.el = el;
this.radPct = pct;
}
function fGetElement(c, r, status){
this.c = c;
this.r = r;
this.status = status;
}
// ============= 元素结构函数结束 ===========
// ============= 片头片尾控制函数开始 =========
function fPlayStartMovie(){
fCleanTable();
fSetMovie("start");
tbForMovie = tb.cloneNode(true);
fSetColor();
fPlayClip1();
function fSetColor(){
var tdList = tbForMovie.getElementsByTagName("TD");
for(var j=0;j<tdList.length;j++){
if(tdList[j].status) tdList[j].bgColor=bgColor;
}
}
}
function fPlayClip1(){
var rowEl = tb.insertRow(0);
fFillRow(rowEl);
tb.deleteRow(r);
var row0 = tb.rows[0];
var row1 = tbForMovie.rows[iForMovie];
row0.replaceNode(row1);
if(iForMovie == 0) {iForMovie = r;sForMovie = window.setTimeout("fPlayClip2()",2000);return;}
iForMovie -- ;
sForMovie = window.setTimeout("fPlayClip1()",20);
}
function fPlayClip2(){
var midRow = Math.round(r/2);
var rowEl = tb.insertRow(midRow);
fFillRow(rowEl);
var rowEl = tb.insertRow(midRow);
fFillRow(rowEl);
tb.deleteRow(0);
tb.deleteRow(tb.rows.length-1);
if(iForMovie == 0) {fStart();return;}
iForMovie -- ;
sForMovie = window.setTimeout("fPlayClip2()",20)
}
function fFillRow(rowEl){
for(var j=0;j<c;j++){
var cellEl = rowEl.insertCell(j);
cellEl.style.width = cWidth + "px";
cellEl.style.height = cWidth + "px";
}
}
function fSetMovie(type){
var arr = (type == "start"?startMovie:endMovie).split(",");
for(var i=0;i<arr.length;i++){
var arrSub = arr[i].split("^");
tb.rows[arrSub[0]].cells[arrSub[1]].status = true;
}
}
function fPlayFailMovie(){
var tdList = tb.getElementsByTagName("TD");
if(moviePoint>-1 && !tdList[moviePoint].status) tdList[moviePoint].bgColor = bgColor;
else if(moviePoint>-1 && tdList[moviePoint].status) tdList[moviePoint].bgColor = "#ffffff";
moviePoint -- ;
if(moviePoint>-1) sForMovie = window.setTimeout("fPlayFailMovie()", movieSpeed);
}
// ============= 片头片尾控制函数结束 =========
// ============= 选项控制函数开始 =========
function fRestart(){
if(arrEls.length == 0) {alert("没有定义任何元素!");return;}
fCleanTable();
if(s) window.clearInterval(s);
fGetCurrentEl();
fGetNextEl();
drawNextEl();
fInit();
}function fRecordElement(){
arrEls[arrEls.length] = new ElContain(fGetElements(sRecordElement), win.prompt("此元素出现的机率百分比","20"));
}function fShowHideAdvance(){
if(dvAdvance.style.display == "") dvAdvance.style.display = "none";
else{
dvAdvance.style.display = "";
fCleanTable();
if(s) window.clearInterval(s);
}
}
function fCleanTable(){
for(var i=r-1;i>-1;i--){
for(var j=0;j<c;j++){
tb.rows[i].cells[j].bgColor = "#ffffff";
tb.rows[i].cells[j].status = false;
}
}
}
function fRecordMovie(type){
var str = "";
var tdList = tb.getElementsByTagName("TD");
for(var i=0;i<tdList.length;i++){
if(tdList[i].bgColor == bgColor){
var elRowAndCell = tdList[i].parentElement.rowIndex + "^" + tdList[i].cellIndex;
str += str == ""?elRowAndCell:"," + elRowAndCell;
}
}
if(str == "") {alert("请用鼠标点击table里面的单元格!");return;}
if(type == "start")
startMovie = window.prompt("",str);
else
endMovie = window.prompt("",str);
}
// ============= 选项控制函数结束 =========
var dv = document.createElement("<div>");
dv.style.styleFloat = "left";
//dv.style.display = "none";
dv.id = "dvOption";
document.body.appendChild(dv);
dv.appendChild(fGetTable(CONTAINW, CONTAINW, cWidth, "myTb1"));
myTb1.style.marginLeft = "5px";
dv.appendChild(document.createElement("<span id='Score' style='margin-top:10px;display:block;margin-left:5px;'></span>"));
dv.appendChild(document.createElement("<input type='button' value='重新开始' onclick='fRestart();this.blur();' style='margin-top:10px;display:block;margin-left:5px;'>"));
dv.appendChild(document.createElement("<input type='button' value='高级选项' onclick='fShowHideAdvance();this.blur();' style='margin-top:10px;display:block;margin-left:5px;'>")); var dv = document.createElement("<div>");
dv.style.styleFloat = "left";
dv.style.border = "1px solid #cccccc";
dv.style.display = "none";
dv.id = "dvAdvance";
document.body.appendChild(dv);
dv.appendChild(document.createElement("<input type='button' value='录制片头' onclick='fRecordMovie(\"start\")' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='录制片尾' onclick='fRecordMovie(\"end\")' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='显示现有的元素' onclick='fDisplayElement()' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='自定义元素' onclick='fDefineElement()' style='margin:3px'>"));
dv.appendChild(document.createElement("<input type='button' value='清空' onclick='fCleanTable()' style='margin:3px'>"));
}
function fCleanTB(){
sRecordElement = '';
var tdList = win.document.getElementsByTagName('TD');
for(var i=0;i<tdList.length;i++)
tdList[i].bgColor='#ffffff'
}
function fDefineElement(){
try{win.close();} catch(e){}
win = window.open("",null,"height=150,width=150,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes");
win.document.body.innerHTML = "";
var tb = fWinGetTable(win,CONTAINW, CONTAINW, cWidth*2, "");
win.document.body.innerHTML = "";
win.document.body.appendChild(tb);
win.document.body.appendChild(win.document.createElement("<input type='button' value='清空' onclick='opener.fCleanTB()' style='margin:3px'>"));
win.document.body.appendChild(win.document.createElement("<input type='button' value='加入' onclick='opener.fRecordElement()' style='margin:3px'>"));
win.document.onclick = function(){
if(win.event.srcElement.tagName == 'TD'){
win.event.srcElement.bgColor = bgColor;
rAndc =win.event.srcElement.parentNode.rowIndex + '^' + win.event.srcElement.cellIndex;
if(sRecordElement.indexOf(rAndc)<0) sRecordElement += ((sRecordElement=='')?rAndc:('\,'+rAndc));
}
}
}
function fDisplayElement(){
win = window.open("",null,"height=200,width=150,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes");
win.document.write("<script>function HeyBeClose(obj){if(obj.nextSibling) {if(obj.nextSibling.tagName=='DIV') {obj.nextSibling.value = parseInt(obj.nextSibling.value,10)-1;} HeyBeClose(obj.nextSibling)}}<\/script><body><\/body>");
for(var i=0;i<arrEls.length;i++){
var el = arrEls[i].el;
var tb = fWinGetTable(win,CONTAINW, CONTAINW, cWidth*2, i);
win.document.body.appendChild(tb);
var dv = win.document.createElement("<div value="+ i +" style='margin:5px;cursor:hand;' onclick='opener.arrEls.splice(this.value,1); HeyBeClose(this); document.body.removeChild(this.previousSibling); document.body.removeChild(this);'>");
dv.innerHTML = "删除";
win.document.body.appendChild(dv);
for(var j=0;j<el.length;j++){
if(el[j].status) tb.rows[el[j].r].cells[el[j].c].bgColor = bgColor;
}
}
}
// ============= HTML标签构造结束 ===========
// ============= 元素结构函数开始 ===========
function fGetElements(str){
var arr = str.split(",");
var arrElement = new Array();
for(var i=0;i<CONTAINW;i++){
for(var j=0;j<CONTAINW;j++){
for(var k=0;k<arr.length;k++){
if(arr[k].split("^")[0] == j && arr[k].split("^")[1] == i){
arrElement[arrElement.length] = new fGetElement(j, i, true);
break;
}
if(k == arr.length-1) arrElement[arrElement.length] = new fGetElement(j, i, false);
}
}
}
return arrElement;
}
function ElContain(el, pct){
this.el = el;
this.radPct = pct;
}
function fGetElement(c, r, status){
this.c = c;
this.r = r;
this.status = status;
}
// ============= 元素结构函数结束 ===========
// ============= 片头片尾控制函数开始 =========
function fPlayStartMovie(){
fCleanTable();
fSetMovie("start");
tbForMovie = tb.cloneNode(true);
fSetColor();
fPlayClip1();
function fSetColor(){
var tdList = tbForMovie.getElementsByTagName("TD");
for(var j=0;j<tdList.length;j++){
if(tdList[j].status) tdList[j].bgColor=bgColor;
}
}
}
function fPlayClip1(){
var rowEl = tb.insertRow(0);
fFillRow(rowEl);
tb.deleteRow(r);
var row0 = tb.rows[0];
var row1 = tbForMovie.rows[iForMovie];
row0.replaceNode(row1);
if(iForMovie == 0) {iForMovie = r;sForMovie = window.setTimeout("fPlayClip2()",2000);return;}
iForMovie -- ;
sForMovie = window.setTimeout("fPlayClip1()",20);
}
function fPlayClip2(){
var midRow = Math.round(r/2);
var rowEl = tb.insertRow(midRow);
fFillRow(rowEl);
var rowEl = tb.insertRow(midRow);
fFillRow(rowEl);
tb.deleteRow(0);
tb.deleteRow(tb.rows.length-1);
if(iForMovie == 0) {fStart();return;}
iForMovie -- ;
sForMovie = window.setTimeout("fPlayClip2()",20)
}
function fFillRow(rowEl){
for(var j=0;j<c;j++){
var cellEl = rowEl.insertCell(j);
cellEl.style.width = cWidth + "px";
cellEl.style.height = cWidth + "px";
}
}
function fSetMovie(type){
var arr = (type == "start"?startMovie:endMovie).split(",");
for(var i=0;i<arr.length;i++){
var arrSub = arr[i].split("^");
tb.rows[arrSub[0]].cells[arrSub[1]].status = true;
}
}
function fPlayFailMovie(){
var tdList = tb.getElementsByTagName("TD");
if(moviePoint>-1 && !tdList[moviePoint].status) tdList[moviePoint].bgColor = bgColor;
else if(moviePoint>-1 && tdList[moviePoint].status) tdList[moviePoint].bgColor = "#ffffff";
moviePoint -- ;
if(moviePoint>-1) sForMovie = window.setTimeout("fPlayFailMovie()", movieSpeed);
}
// ============= 片头片尾控制函数结束 =========
// ============= 选项控制函数开始 =========
function fRestart(){
if(arrEls.length == 0) {alert("没有定义任何元素!");return;}
fCleanTable();
if(s) window.clearInterval(s);
fGetCurrentEl();
fGetNextEl();
drawNextEl();
fInit();
}function fRecordElement(){
arrEls[arrEls.length] = new ElContain(fGetElements(sRecordElement), win.prompt("此元素出现的机率百分比","20"));
}function fShowHideAdvance(){
if(dvAdvance.style.display == "") dvAdvance.style.display = "none";
else{
dvAdvance.style.display = "";
fCleanTable();
if(s) window.clearInterval(s);
}
}
function fCleanTable(){
for(var i=r-1;i>-1;i--){
for(var j=0;j<c;j++){
tb.rows[i].cells[j].bgColor = "#ffffff";
tb.rows[i].cells[j].status = false;
}
}
}
function fRecordMovie(type){
var str = "";
var tdList = tb.getElementsByTagName("TD");
for(var i=0;i<tdList.length;i++){
if(tdList[i].bgColor == bgColor){
var elRowAndCell = tdList[i].parentElement.rowIndex + "^" + tdList[i].cellIndex;
str += str == ""?elRowAndCell:"," + elRowAndCell;
}
}
if(str == "") {alert("请用鼠标点击table里面的单元格!");return;}
if(type == "start")
startMovie = window.prompt("",str);
else
endMovie = window.prompt("",str);
}
// ============= 选项控制函数结束 =========
解决方案 »
- 使用jquery.masonry做瀑布流,但是为什么每次打开页面回重叠
- 为什么在onclick下获取不了i?是闭包问题吗?
- 请问如何用JS打开一个文件保存对话框,然后下载指定文件到本地目录?
- marquee
- 服务端的recordset如果转成客户端ActiveXObject("ADODB.Recordset");?
- 有什么办法让用户下载服务器上的文件呢?FTP除外?必给分!
- Page.RegisterStartupScript()是JAVASCRIPT本身带有的方法吗?
- 请教高手,javascript能发送email吗?能给出方法吗?在线等候
- 如何根据名字取得已经存在的窗口....在线等待
- 菜鸟问题,各位大虾,怎样再web页面中屏蔽鼠标右键
- 关于级联下拉框第二级默认值的问题
- 框架网页,可否在按F5时只刷新当前窗口,而非整个框架?
function fInit(){
cRow = 0;
cColumn = Math.round(c/2) - 2;
moviePoint = r*c-1;
score = 0;
bonusLevel = 0;
speed = 500;
iForMovie = r - 1;
s = null;
try{window.clearTimeout(sForMovie);window.clearInterval(s)} catch(e){}
tb = document.getElementById("myTb0");
fPlayStartMovie();
}function fRotate(){
for(var i=0;i<CurrentEl.el.length;i++){
var row = CurrentEl.el[i].c;
var column = CONTAINW - CurrentEl.el[i].r - 1
CurrentEl.el[i].r = row;
CurrentEl.el[i].c = column;
}
}function fGetCurrentEl(){
CurrentEl = fRandom();
}
function fGetNextEl(){
NextEl = fRandom();
}
function fRandom(){
var el = arrEls[Math.round(Math.random()*(arrEls.length-1))];
if(Math.random()*100<el.radPct) return el;
else return fRandom();
}
function drawNextEl(){
var tbs = document.getElementById("myTb1");
for(var i=0;i<NextEl.el.length;i++){
if(NextEl.el[i].status){
tbs.rows[NextEl.el[i].r].cells[NextEl.el[i].c].bgColor = bgColor;
}else{
tbs.rows[NextEl.el[i].r].cells[NextEl.el[i].c].bgColor = "#ffffff";
}
}
}
function fStart(){
s = window.setInterval("fMove('down')",speed)
document.getElementById("Score").innerText = "得分:" + score;
}
function fMove(forward){
if(!fCheckCanMoveOrRotate(forward, "move")) return;
fCleanCurrent();
if(forward == "down") cRow ++;
if(forward == "left") cColumn --;
if(forward == "right") cColumn ++;
fDrawCurrent();
}
function fCleanCurrent(){
for(var i=0;i<CurrentEl.el.length;i++){
if(CurrentEl.el[i].status){
tb.rows[CurrentEl.el[i].r+cRow].cells[CurrentEl.el[i].c+cColumn].bgColor = "#ffffff";
}
}
}
function fCheckCanMoveOrRotate(forward, type){
var blnTemp = false;
for(var i=0;i<CurrentEl.el.length;i++){
if(CurrentEl.el[i].status){
if(type == "move"){
var row = CurrentEl.el[i].r;
var column = CurrentEl.el[i].c;
}else{
var row = CurrentEl.el[i].c;
var column = CONTAINW - CurrentEl.el[i].r - 1
}
if(forward == "down") row ++;
if(forward == "left") column --;
if(forward == "right") column ++;
if(row + cRow>r-1){return fCheckIfFail(row+cRow)}
if(row + cRow<0) return false;
if(column + cColumn<0) return false;
if(column + cColumn>c-1) return false;
if(tb.rows[row+cRow].cells[column+cColumn].bgColor == bgColor) {
for(var j=0;j<CurrentEl.el.length;j++){
if(row == CurrentEl.el[j].r && column == CurrentEl.el[j].c){
if(CurrentEl.el[j].status) {blnTemp = true;break;}
else {//return fCheckIfFail(row+cRow)
}
}
}
if(forward == "down" && !blnTemp){return fCheckIfFail(row+cRow)}
else if(forward != "down" && !blnTemp) return false;
blnTemp = false;
}
}
}
return true;
}
function fCheckIfFail(row){
if(row<=CONTAINW) {
window.clearInterval(s);
fSetMovie("end");
fPlayFailMovie();
return false;
}
fCheckCanCleanRow();
fStartNext();
document.getElementById("Score").innerText = "得分:" + score;
return false;
}function fCheckCanCleanRow(){
var blnTemp = true;
BonusLevel = 0;
for(var i=0;i<tb.rows.length;i++){
var row = tb.rows[i];
for(var j=0;j<row.cells.length;j++){
if(row.cells[j].bgColor != bgColor){
blnTemp = false;
break;
}
}
if(blnTemp){
tb.deleteRow(i);
score += 10;
bonusLevel ++;
var rowEl = tb.insertRow(0);
for(var k=0;k<c;k++){
var cellEl = rowEl.insertCell(k);
cellEl.style.width = cWidth + "px";
cellEl.style.height = cWidth + "px";
}
}
blnTemp = true;
}
if(bonusLevel!=0) score += eval("bonus" + bonusLevel);
bonusLevel = 0;
}function fStartNext(){
cRow = 0;
cColumn = Math.round(c/2) - 2;
CurrentEl = NextEl;
fGetNextEl();
drawNextEl();
}
function fDrawCurrent(){
for(var i=0;i<CurrentEl.el.length;i++){
if(CurrentEl.el[i].status){
tb.rows[CurrentEl.el[i].r+cRow].cells[CurrentEl.el[i].c+cColumn].bgColor = bgColor;
}
}
}
// ============= 游戏控制函数结束 =========
//-->
</SCRIPT>
我玩了一下,看了一下代码。
我参考了你的代码,往里面添加了一个“快速下降”功能。
也就是当按某个键(我用的是"up"),方块立刻立即掉下来,而不用老是按down。
(请允许我的冒昧。呵!呵!)以<SCRIPT LANGUAGE="JavaScript">为第一行代码作参照。
80行改为: var left = 37, right = 39, rotate = 32, down = 40;
121行里添加如下代码,也就是"document.onkeydown = function()"加入如下代码。
//------------------------------------------
case up:
while(fCheckCanMoveOrRotate("down", "move")){
fMove("down");
}
break;
//------------------------------------------二,
你既然能够"录制片头",想必也能够(做到)"录制全程"。
这是我的建议。
添加“录制开始”(按钮),“录制结束”(按钮),“播放录像”(按钮)
“录像脚本”(文本框).“录制开始” onclick :
当然就是录制开始。 RecordReplayStart(){doRecordReplayStart()};“录制结束” onclick :
录制完成。
RecordReplayEnd(){
doRecordReplayEnd();
//弹出prompt,prompt里的文本框显示script.(让用户赋值这个script)
};“播放录像” onclick :
//在“录像脚本”(文本框) 填入script。
ShowReplay();
^_^非常期待你能把这个功能作出来,并发出来!(至少发给我啦,呵!呵!)
80行改为: var left = 37, right = 39, rotate = 32, down = 40, up = 38;