浏览模式: 标准 | 列表分类:Javascript
Submitted by gouki on 2011, September 24, 3:33 AM
最近在做ipad上的网页处理的时候,经常需要切换横竖屏。于是找了一下资料,写了一个简单的判断:
function check(){
var s,screen = (window.innerWidth > window.innerHeight) ? "portrait" :"landscape";
if(s!=screen){
s=screen;
alert(s);
}
}
然后在document.addEventListener("DOMContentLoaded",function(){
//在这里加入
window.addEventListener("orientaionchange",check,false);
//然后就是很重要的一句:
setInterval(check,300);
})
为什么要用setInterval,就是因为每一次切换都要迅速判断,因此不得不用setInterval,否则第一次判断后就不会再处理了。。
Tags: javascript, ipad
Javascript | 评论:0
| 阅读:22449
Submitted by gouki on 2011, September 17, 10:44 PM
在博客园看到有人在介绍CoffeeScript,以前仿佛看过类似的东西。所以去官方看了一下,结果发现现在的代码是不是都在追求所谓的语义化?
比如你看这一段 :
mood = greatlyImproved if singing if happy and knowsIt clapsHands() chaChaCha() else showIt() date = if friday then sue else jill options or= defaults
然后所谓生成后的代码就成了这样:
var date, mood; if (singing) mood = greatlyImproved; if (happy && knowsIt) { clapsHands(); chaChaCha(); } else { showIt(); } date = friday ? sue : jill; options || (options = defaults);
看到上面的这段生成后的代码,再对比一下原来的写法,是不是觉得很有意思?
再来一段长的:
grade = (student) -> if student.excellentWork "A+" else if student.okayStuff if student.triedHard then "B" else "B-" else "C" eldest = if 24 > 21 then "Liz" else "Ike"
输出之后就是:
var eldest, grade; grade = function(student) { if (student.excellentWork) { return "A+"; } else if (student.okayStuff) { if (student.triedHard) { return "B"; } else { return "B-"; } } else { return "C"; } }; eldest = 24 > 21 ? "Liz" : "Ike";
越来越发现,原来写伪代码也可以转换成代码。而且看上去也不错,有点象zen coding了。现在很多IDE都支持zen coding
不知道这次这个coffeescript什么时候会被支持
官网:http://jashkenas.github.com/coffee-script/
但是对于用户来说,有一点压力,因为它还是会有一些学习成本。
Javascript | 评论:0
| 阅读:15399
Submitted by gouki on 2011, September 6, 11:01 PM
nodeType的取值还是会经常用到的,但一般我们只用1和3,找了一下资料,1和3的含义是什么,才发现,原来是这样的。【部分资料来自:http://www.impng.com/web-dev/element-nodetype-values.html】
整数 |
常量 |
1 |
ELEMENT_NODE,普通元素节点,如<html>,<p>,<div>,<span>,<img> |
2 |
ATTRIBUTE_NODE,元素属性 |
3 |
TEXT_NODE,文本节点 |
4 |
CDATA_SECTION_NODE,即<![CDATA[ ]]> |
5 |
ENTITY_REFERENCE_NODE,实体引用,如& |
6 |
ENTITY_NODE,实体,如<!ENTITY copyright “Copyright 2010, impng. All rights reserved”]> |
7 |
PROCESSING_INSTRUCTION_NODE,PI,处理指令,如<?xml version=”1.0″?> |
8 |
COMMENT_NODE,注释<!– –> |
9 |
DOCUMENT_NODE,根节点,即document.nodeType |
10 |
DOCUMENT_TYPE_NODE,DTD,文档类型<!DOCTYPE > |
11 |
DOCUMENT_FRAGMENT_NODE,文档片段 |
12 |
NOTATION_NODE,DTD中定义的记号 |
需要注意的是,在IE下会直接跳过HTML中的空格/Tab/换行,而Firefox下空格会认为是一个节点,因此,对类似节点取nextSibling或previousSibling时,需要判断是否是元素节点。所以。要取某个节点下面的文字时,必须是类似这样的写法。
JavaScript代码
- function L(a) {
- var b = "";
- for (a = a.firstChild; a; a = a.nextSibling){
- if (a.nodeType === 3){
- b += a.nodeValue;
- } else if (a.nodeType === 1){
- b += L(a);
- }
- }
- return b
- }
Tags: nodetype, dom
Javascript | 评论:0
| 阅读:19293
Submitted by gouki on 2011, August 30, 10:23 PM
在看代码的时候看到了这个offsetParent也就顺便找了一下资料:
XML/HTML代码
- offsetParent从字面上理解,这是在查找元素的父亲.可实际应用中,根据浏览器他会返回不同的结果.在Opera较低版本中返回被引用元素的直接父元素,在IE中使用offsetParent有时会返回body元素,有时会返回被引用元素的父元素.为什么IE会这样.我会在下面的实例演示中解释清楚.而在FireFox中他总是返回body元素.
- 注意:offsetLeft与offsetTop永远是根据offsetParent来返回值,如果offsetParent返回的是父元素,那么他们就返回与父元素的偏移结果,如果offsetParent返回的是body元素,那么他们就返回与body元素的偏移结果.请根据浏览器进行测试.
然后找了一段代码进行测试:
XML/HTML代码
- <html>
- <head>
- <title>Dom:offsetParent使用</title>
- </head>
- <body>
- <p>该网页中有4个div 他们的id值分别是a,a_1,b,b_1<br/> a包含了a_1.b包含了b_1<br/> a和b是相互独立的..下面我们分别对a_1和b_1两个子元素使用offsetParent方法.
- 你用IE浏览器测试,你会发现a1的运函数弹出body,而b1的运行函数返回了div,同样的两个子元素.同样的使用方法.为什么返回的结果不一样呢? 原因就是我为b1的父元素b,增加了一个宽度属性以后.他就把offsetParent看做是元素的父元素.如果不为b元素指定任何属性样式,他则返回body
- 而在火狐和谷歌浏览器中两次都会弹出body,不会受此影响.</p>
- <div id="a">
- <div id="a_1"></div>
- </div>
- <div id="b" style="width:200px;">
- <div id="b_1"></div>
- </div>
- <script type="text/javascript">
- function a1_offsetParent() { //测试b元素的offsetParent
- var a_1 = document.getElementById("a_1");
- alert(a_1.offsetParent.tagName);
- }
- a1_offsetParent();//运行a1测试函数
- function b1_offsetParent() {
- var b_1 = document.getElementById("b_1");
- alert(b_1.offsetParent.tagName);
- }
- b1_offsetParent();//运行b1测试函数
- </script>
- </body>
- </html>
这个时候就象上面的说明所说的,在firefox和webkit核心下两者都返回了“body”,然而:
XML/HTML代码
- 网友hcp8706说:
- 在FF中使用offsetParent时不一定总返回body元素,当父元素使用css设置了定位属性时,offsetParent就会返回父元素.
于是我在div的id="b"的style里加入了position:absolute,然后再测试,果然就返回了DIV。
XML/HTML代码
- <div id="b" style="width:200px;position:absolute;">
- <div id="b_1"></div>
- </div>
- <script type="text/javascript">
- function b1_offsetParent() {
- var b_1 = document.getElementById("b_1");
- alert(b_1.offsetParent.tagName);
- }
- b1_offsetParent();//运行b1测试函数
- </script>
学习完毕,上述的信息来自:http://www.web666.net/dom/offsetParent.html
Tags: offsetparent
Javascript | 评论:0
| 阅读:18577
Submitted by gouki on 2011, August 24, 12:12 AM
和insertAdjacentHtml等方法类似,只是一个插对象,一个插具体内容,其实都一样啦。
介绍:
语法:
oElement = object . insertAdjacentElement ( sWhere , oElement )
参数:
oElement : 必选项。对象(Element)。要插入到 object 邻近的对象。
sWhere : 必选项。字符串(String)。beforeBegin | afterBegin | beforeEnd | afterEnd beforeBegin : 将 oElement 插到 object 的开始标签之前。
afterBegin : 将 oElement 插到 object 的开始标签之后。但是在 object 的所有原有内容之前。
beforeEnd : 将 oElement 插到 object 的结束标签之前。但是在 object 的所有原有内容之后。
afterEnd : 将 oElement 插到 object 的结束标签之后。
返回值:
oElement : 对象(Element)。返回插入的对象的引用。
说明:
将 oElement 依据 object 定位插入文档结构。
当文档正在载入时,不可以尝试此方法。必须在 onload 事件触发以后。
假如你尝试插入一个已经在文档结构中存在定位的对象,该对象将被移动到你指定的插入位置,而不会有新对象被创建。 【这个功能好啊。不会创建出同名元素等】
测试代码:
XML/HTML代码
- <script>
- var i_nowheight = 250;
- function rdl_doApply(e) {
- with (document.all("oSelect1")) var sParam1 = options[selectedIndex].value;
- with (document.all("oSelect2")) var sParam2 = options[selectedIndex].value;
- var oNewNode = document.createElement(sParam1);
- oList.insertAdjacentElement(sParam2, oNewNode);
- oNewNode.innerText = sParam2
- i_nowheight += 30;
- window.resizeTo(360, i_nowheight);
- }
- </script>
- <div id=oCode>
- <ul id=oList>
- <li>列表项目1
- <li>列表项目2
- </ul>
- </div>
- <table height=56>
- <tr>
- <td><select style="width:100px;" id=oSelect1>
- <option value="button" selected>button</option>
- <option value="b">b</option>
- </select></td>
- <td><select style="width:100px;" id=oSelect2>
- <option value="beforeBegin" selected>beforeBegin</option>
- <option value="afterBegin">afterBegin</option>
- <option value="beforeEnd">beforeEnd</option>
- <option value="afterEnd">afterEnd</option>
- </select></td>
- <td><input type=button value=" 插入 " onclick="rdl_doApply()"></td>
- </tr>
- </table>
Javascript | 评论:0
| 阅读:15263