[JavaScript+DOM+CSS]:奇遇小结一二

        写这篇目的,是想把在Web前端编程时遇到的一些“纳闷问题”记录下来;并将找到的解决方法及应对技巧总结归纳;以便以后查找使用。想来想去不知叫什么题目比较合适,就叫这个了。想以后遇到“纳闷问题都会补充进来吧”。也欢迎大家讨论,补充;把自己遇到的奇怪的前端问题贴出来。闲话不说了,这两天利用空闲之际想做个弹出层对话框。在这过程中遇到了几个问题,暂且先记下两个问题及解决方法。

 问题一、想试图通过Javascript设置某元素style的float属性。我们使用Javascript操作css属性的写法是有一定的规律的:

          1、对于没有中划线的css属性一般直接使用style.属性名即可。如:obj.style.margin、obj.style.width、obj.style.left、obj.style.position等。

          2、对于含有中划线的css属性,将每个中划线去掉并将每个中划线后的第一个字符换成大写即可。如:obj.style.marginTop、obj.style.borderLeftWidth、obj.style.zIndex、obj.style.fontFamily等。

       这个规律我想大多数的前端开发者也都熟知。但在css中有一个特殊的属性其js使用方法比较特殊。这个特殊的属性就是:float。我们不能直接使用obj.style.float来使用,这样操作是无效的。其正确的使用方法是为:IE:obj.style.styleFloat其他浏览器:obj.style.cssFloat

问题二、通过Javascript使动态添加到页面里的iframe的边框、边线去掉,不想看到。

        为了达到目的,我们一般都会想到通过 iframeObj.frameBorder = "0";  [0:无边框、1:有边框],但事实这样做了,有些浏览器是没有了,我在Chrome 11.0.696.68看,达到了想要的效果(火狐中没测,应该正常);可是在IE 8中死活还是有的, 就是没效果;为什么呢?我又一次纳闷了。通过style.border = "0"; 还是不行,百度吧。一查,果然有同仁遇到跟我一样的问题。并且给出解决方法。在这里谢谢那位同仁。他的解决方法:var iframe = document.createElement('iframe'); iframe.setAttribute('frameborder', '0', 0);后面那个'0'表示是否区分大小写。他说原因:“DOM里面的属性都是大写的,也就是说上面这段代码,在IE里面最后会变成:< IFRAME frameBorder=0... 由于IE认大写的,所以”frameborder“ 它自然不认。”方法凑效,但原因不太明白。又搜出值得一读的关于译自W3C DOM Level 1中关于setAttribute方法的说明,内容不多,就贴出来了。

具体的方法参数如下:
object.setAttribute(sName, vValue [, iFlags])

参数:
    sName:必填项. String类型,属性名
    vValue:必填项. 为属性指定的变量,可以为string, number, 或者 Boolean类型
    iFlags:选填. 下面指定的两种 Integer 类型的标志;0:覆盖同名、1:默认值,为属性添加指定值。

返回值:无。

备注:
如果指定的属性不存在,该方法讲为object添加新属性及值。
注意,当拼写属性名时. 如果 iFlags 设置成 1 并且 指定的sName 参数在该属性上没有相同名字时(包括大小写), object讲为之创建新属性。
如果object有两个或多个相同的属性名, 仅在值上不同时, iFlags设为 0, 该方法仅保存第一个被创建属性的值,其她的同名属性将被忽略。
使用该方法设置 CLASS 属性时, 请将sName 设为 "className",以符合Dynamic HTML (DHTML) 特性.(其实"className"仅适合在IE下使用,FF下要用"class")。

 

另外有个技巧:就是通过 “var iframe = document.createElement('iframe');这样创建的元素,在VS2008中通过智能感知是点不出属性或者事件来的。如果你要想知道某个属性或者事件;你大可在页面拖个你要创建的那个类型的元素;然后通过var dialogSrcIframe = document.getElementById("dialogIframe"); dialogSrcIframe.src = url;就可以通过智能感知点出属性或者事件进行赋值等操作,然后直接替换对象名就可以了。

 

O(∩_∩)O~

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,下面是一个简单的2048小游戏的代码示例: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>2048 Game</title> <style> body { font-family: Arial, sans-serif; text-align: center; } .container { display: inline-block; margin-top: 20px; border: 1px solid #ccc; box-shadow: 0 0 10px #ccc; } .row { display: flex; } .cell { width: 100px; height: 100px; margin: 5px; font-size: 2rem; font-weight: bold; text-align: center; line-height: 100px; background-color: #eee; border-radius: 5px; } .cell.empty { background-color: #ccc; color: #fff; } .cell.num2 { background-color: #eee; color: #333; } .cell.num4 { background-color: #e8e189; color: #333; } .cell.num8 { background-color: #f3b04b; color: #fff; } .cell.num16 { background-color: #f39642; color: #fff; } .cell.num32 { background-color: #f07f4f; color: #fff; } .cell.num64 { background-color: #f66d3b; color: #fff; } .cell.num128 { background-color: #f7c34f; color: #fff; } .cell.num256 { background-color: #f7bb3f; color: #fff; } .cell.num512 { background-color: #f7a92d; color: #fff; } .cell.num1024 { background-color: #f7b40e; color: #fff; } .cell.num2048 { background-color: #f7b40e; color: #fff; } </style> </head> <body> <div class="container"> <div class="row"> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> </div> <div class="row"> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> </div> <div class="row"> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> </div> <div class="row"> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> <div class="cell empty"></div> </div> </div> <script> const ROWS = 4; const COLS = 4; let board = []; function init() { for (let row = 0; row < ROWS; row++) { board[row] = []; for (let col = 0; col < COLS; col++) { board[row][col] = 0; } } } function getEmptyCells() { let cells = []; for (let row = 0; row < ROWS; row++) { for (let col = 0; col < COLS; col++) { if (board[row][col] === 0) { cells.push({row, col}); } } } return cells; } function generateNumber() { let cells = getEmptyCells(); if (cells.length > 0) { let {row, col} = cells[Math.floor(Math.random() * cells.length)]; board[row][col] = Math.random() < 0.9 ? 2 : 4; } } function updateView() { for (let row = 0; row < ROWS; row++) { for (let col = 0; col < COLS; col++) { let cell = document.querySelector(`.row:nth-child(${row + 1}) .cell:nth-child(${col + 1})`); cell.classList.remove("num2", "num4", "num8", "num16", "num32", "num64", "num128", "num256", "num512", "num1024", "num2048"); if (board[row][col] === 0) { cell.classList.add("empty"); cell.innerText = ""; } else { cell.classList.remove("empty"); cell.classList.add(`num${board[row][col]}`); cell.innerText = board[row][col]; } } } } function moveLeft() { let moved = false; for (let row = 0; row < ROWS; row++) { let prev = -1; for (let col = 0; col < COLS; col++) { if (board[row][col] !== 0) { if (prev > -1 && board[row][prev] === board[row][col]) { board[row][prev] *= 2; board[row][col] = 0; moved = true; } else { if (prev > -1) { board[row][prev + 1] = board[row][col]; board[row][col] = 0; moved = true; } else { prev = col; } } } } } return moved; } function moveRight() { let moved = false; for (let row = 0; row < ROWS; row++) { let prev = -1; for (let col = COLS - 1; col >= 0; col--) { if (board[row][col] !== 0) { if (prev > -1 && board[row][prev] === board[row][col]) { board[row][prev] *= 2; board[row][col] = 0; moved = true; } else { if (prev > -1) { board[row][prev - 1] = board[row][col]; board[row][col] = 0; moved = true; } else { prev = col; } } } } } return moved; } function moveUp() { let moved = false; for (let col = 0; col < COLS; col++) { let prev = -1; for (let row = 0; row < ROWS; row++) { if (board[row][col] !== 0) { if (prev > -1 && board[prev][col] === board[row][col]) { board[prev][col] *= 2; board[row][col] = 0; moved = true; } else { if (prev > -1) { board[prev + 1][col] = board[row][col]; board[row][col] = 0; moved = true; } else { prev = row; } } } } } return moved; } function moveDown() { let moved = false; for (let col = 0; col < COLS; col++) { let prev = -1; for (let row = ROWS - 1; row >= 0; row--) { if (board[row][col] !== 0) { if (prev > -1 && board[prev][col] === board[row][col]) { board[prev][col] *= 2; board[row][col] = 0; moved = true; } else { if (prev > -1) { board[prev - 1][col] = board[row][col]; board[row][col] = 0; moved = true; } else { prev = row; } } } } } return moved; } function gameover() { for (let row = 0; row < ROWS; row++) { for (let col = 0; col < COLS; col++) { if (board[row][col] === 0) { return false; } if (row > 0 && board[row][col] === board[row - 1][col]) { return false; } if (row < ROWS - 1 && board[row][col] === board[row + 1][col]) { return false; } if (col > 0 && board[row][col] === board[row][col - 1]) { return false; } if (col < COLS - 1 && board[row][col] === board[row][col + 1]) { return false; } } } return true; } function handleKeyDown(event) { let moved = false; switch (event.keyCode) { case 37: // left moved = moveLeft(); break; case 38: // up moved = moveUp(); break; case 39: // right moved = moveRight(); break; case 40: // down moved = moveDown(); break; } if (moved) { generateNumber(); updateView(); if (gameover()) { alert("Game over!"); } } } init(); generateNumber(); generateNumber(); updateView(); document.addEventListener("keydown", handleKeyDown); </script> </body> </html> ``` 这个代码使用了HTML、CSSJavaScript来实现一个简单的2048游戏。其中,HTML用于定义游戏界面的布局,CSS用于定义游戏界面的样式,JavaScript则用于实现游戏的逻辑。游戏的主要逻辑包括初始化游戏、生成随机数、更新游戏界面、处理玩家输入、判断游戏是否结束等。通过这个示例,你可以了解到如何使用JavaScript+HTML+CSS来实现一个简单的小游戏。 ### 回答2: 2048是一款非常受欢迎的数字益智游戏,它的目标是通过合并相同数字的方块,最终达到数字2048。我们可以使用JavaScript、HTML5和CSS3来创建一个2048游戏。 首先,我们需要一个HTML文件来承载游戏。可以创建一个包含游戏容器和得分板的div元素,并使用CSS样式设置其样式。 接下来,在JavaScript文件中,我们需要实现游戏的逻辑。首先,我们要定义一个二维数组来表示游戏的方块。每个方块包含一个数字值和一个对应的CSS样式类。 接着,我们需要编写函数来实现游戏的核心功能。例如,可以编写一个函数来初始化游戏,用于在游戏开始时创建两个随机的方块。还可以编写函数来处理方块的合并操作,当两个相邻的方块具有相同的数字时,将它们合并为一个新的方块。还有一个函数用于处理用户的移动操作,例如按下上、下、左、右箭头键。 在样式方面,我们可以使用CSS3的动画和过渡效果来优化游戏的界面。例如,可以为方块的合并操作添加一个过渡效果,使游戏更加流畅和有趣。 最后,我们需要在HTML文件中包含JavaScript文件,并在页面加载时调用初始化函数,以启动游戏。 总结来说,使用JavaScript、HTML5和CSS3来编写一个2048游戏需要以下步骤:创建HTML文件来承载游戏,通过JavaScript实现游戏的逻辑和功能,使用CSS3的样式和动画来美化游戏界面。通过这些步骤,我们可以成功地创建一个简单并有趣的2048游戏。 ### 回答3: 2048游戏是一款数字益智类游戏,我们可以使用JavaScript、HTML5和CSS3来实现它。 首先,我们可以使用HTML5创建游戏的基本布局。可以使用<div>元素来表示游戏的方格,并使用CSS3对其进行样式设置,包括大小、背景颜色和边框等。 接下来,我们可以使用JavaScript编写游戏逻辑。可以使用一个二维数组来表示游戏的方格,通过监听用户键盘操作来实现方格的上下左右移动。在移动方格的过程中,需要判断两个相邻方格的数字是否相等,如果相等则合并它们,并更新得分。 除了移动方格,我们还需要在游戏过程中随机生成新的方格,并在合适的位置显示。使用JavaScript的Math.random()函数来生成一个随机数,然后根据随机数在空白的方格中显示新的数字。 在游戏过程中,我们还可以根据每个方格的数字大小来改变方格的颜色,并在数字超过2048时显示胜利界面。 最后,我们可以为游戏添加一些特效和动画效果,以增加游戏的趣味性。比如在方格合并时添加动画效果,或者在游戏结束时显示失败界面。 总之,使用JavaScript、HTML5和CSS3来实现2048游戏是完全可行的。通过合理的布局、逻辑和样式设置,我们可以实现一个功能完善、界面美观的2048游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的小壁虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值