zoukankan      html  css  js  c++  java
  • IE与FF有关javascript差异的点点滴滴 F

    http://js8.in/472.html

    window.event对象差异

    IE:有window.event对象
    FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event)

    获取鼠标当前坐标

    IE:event.x和event.y。
    FF:event.pageX和event.pageY。
    通用:两者都有event.clientX和event.clientY属性。

    鼠标当前坐标(加上滚动条滚过的距离)

    IE:event.offsetX和event.offsetY。
    FF:event.layerX和event.layerY。

    标签的x和y的坐标位置:style.posLeft 和 style.posTop

    IE:有。
    FF:没有。
    通用:object.offsetLeft 和 object.offsetTop。

    获取窗体的高度和宽度

    IE:document.body.offsetWidth和document.body.offsetHeight。注意:此时页面一定要有body标签。
    FF:window.innerWidth和window.innerHegiht,以及document.documentElement.clientWidth和document.documentElement.clientHeight。
    通用:document.body.clientWidth和document.body.clientHeight。

    添加事件

    IE:element.attachEvent(”onclick”, func);。
    FF:element.addEventListener(”click”, func, true)。
    通用:element.onclick=func。虽然都可以使用onclick事件,但是onclick和上面两种方法的效果是不一样的,onclick只有执行一个过程,而attachEvent和addEventListener执行的是一个过程列表,也就是多个过程。例如:element.attachEvent(”onclick”, func1);element.attachEvent(”onclick”, func2)这样func1和func2都会被执行。

    在这里断桥残雪,曾经写过一个通用的添加删除绑定事件的函数,大家可以查看以下文章:《JavaScript跨浏览器的添加删除事件绑定函数

    标签的自定义属性

    IE:如果给标签div1定义了一个属性value,可以div1.value和div1["value"]取得该值。
    FF:不能用div1.value和div1["value"]取。
    通用:div1.getAttribute(”value”)。

    父节点、子节点和删除节点

    IE:parentElement、parement.children,element.romoveNode(true)。
    FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。

    clientX,pageX,offsetX,x,layerX,screenX,offsetLeft

    screenX:鼠标在显示屏幕上的坐标。
    clientX:鼠标在页面显示区域的坐标。
    注:以上两个都是各浏览器通用的。以下为特有方法:

    pageX:FF特有,鼠标在页面上的位置,从页面左上角开始定位,这个可以很方便在整个页面上进行定位,IE没有直接替换的属性。
    layerX:FF特有,鼠标相对于“触发事件的元素的层级关系中离该元素最近的,设置了position的父元素”的边界的位置,从border的左上角开始定位,即如果这个父元素存在border,则坐标原点在border的左上角,而不是内容区域的左上角。
    offsetX:IE特有,鼠标相对于“触发事件的元素”的位置,从内容区域左上角开始定位,不是从border左上角开始!这个属性比较好用,用来判断鼠标点在一个元素中的哪个位置很方便,FF没有直接替换的属性。
    x:IE特有,跟layerX一个效果,可作为layerX的直接替换属性。
    注:IE和FF的定位有个1px的差别,实际上,IE的定位从0开始,FF的定位从1开始,FF永远会比IE大1px,需要根据实际情况处理。

    offsetLeft:这个属性不是事件对象的属性,而是DOM对象所有的,该属性表示的是DOM对象在“该DOM对象的层级关系中离该对象最近的,设置了position的父对象”中的位置,虽然话是这么说的,但是不同的浏览器效果不一样。

    FF中严格按上述说明执行,但是在IE6/7中,这个属性返回该DOM对象在其直接父对象中的位置,但是IE8改正了这个问题,不过IE8又有了一个新问题,其他的浏览器都是从父对象的内容区域的左上角开始定位,IE8确是从父元素的border的左上角开始定位,由于测试环境为IETester中的IE8,不能排除是IETester的问题。

    CSS “float” 值

    访问一个给定CSS 值的最基本句法是:object.style.property,使用驼峰写法来替换有连接符的值,例如,访问某个ID为”header”的<div>的 background-color值,我们使用如下句法:

    document.getElementById("header").style.backgroundColor= "#ccc";

    但由于”float“这个词是一个JavaScript保留字,因此我们不能用 object.style.float来访问,这里,我们可以在两种浏览器中这么做:
    在IE中这样写:

    document.getElementById("header").style.styleFloat = "left";

    在Firefox中这样写:

    document.getElementById("header").style.cssFloat = "left";

    2. 元素的推算样式

    JavaScript可以使用object.style.property句法,方便地在外部访问和修改某个CSS样式,但其限制是这些句法只能取出已设的行内样式或者直接由JavaScript设定的样式。并不能访问某个外部的样式表。为了访问元素的”推算”样式,我们可以使用下面的代码:
    在IE中这样写:

    var myObject = document.getElementById("header");
    var myStyle = myObject.currentStyle.backgroundColor;

    在Firefox中这样写:

    var myObject = document.getElementById("header");
    var myComputedStyle = document.defaultView.getComputedStyle(myObject, null);
    var myStyle = myComputedStyle.backgroundColor;

    3. 访问元素的”class”

    像”float“一样,”class“是JavaScript的一个保留字,在这两个浏览器中我们使用如下句法来访问”class”。
    在IE中这样写:

    var myObject = document.getElementById("header");
    var myAttribute = myObject.getAttribute("className");

    在Firefox中这样写:

    var myObject = document.getElementById("header");
    var myAttribute = myObject.getAttribute("class");

    This syntax would also apply using the setAttribute method.

    4. 访问<label>标签中的”for”

    就第3点中所提到的,我们同样需要使用不现的句法区分来访问<label>标签中的”for“:
    在IE中这样写:

    var myObject = document.getElementById("myLabel");
    var myAttribute = myObject.getAttribute("htmlFor");

    在Firefox中这样写:

    var = document.getElementById("myLabel");
    var myAttribute = myObject.getAttribute("for");

    5. 获取鼠标指针的位置

    计算出鼠标指针的位置对你来说可能是非常少见的,不过当你需要的时候,在IE和Firefox中的句法是不同的。这里所写出的代码将是最最基本的,也可能是某个复杂事件处理中的某一个部分。但他们可以解释其中的异同点。同时,必须指出的是结果相对于Firefox,IE会有更在的不同,这种方法本身就是有BUG的。通常,这种不同可以用”拖动位置”来得到补偿,但,那是另外一个主题的文章了: ) !
    在IE中这样写:

    var myCursorPosition = [0, 0];
    myCursorPosition[0] = event.clientX;
    myCursorPosition[1] = event.clientY;

    在Firefox中这样写:

    var myCursorPosition = [0, 0];
    myCursorPosition[0] = event.pageX;
    myCursorPosition[1] = event.pageY;

    6. 获取可见区域、窗口的大小

    有时,我们会需要找到浏览器的可视位置的大小,通常我们称之为”可见区域”。
    在IE中这样写:

    var myBrowserSize = [0, 0];
    myBrowserSize[0] = document.documentElement.clientWidth;
    myBrowserSize[1] = document.documentElement.clientHeight;

    在Firefox中这样写:

    var myBrowserSize = [0, 0];
    myBrowserSize[0] = window.innerWidth;
    myBrowserSize[1] = window.innerHeight;

    7. Alpha 透明

    好吧,这并不是一个JavaScript句法问题,而是源自于CSS的Alpha透明。但当某个物体需要淡入/出则需要JavaScript来表现,这是通过访问CSS的Alpha透明设置来完成的,通常在一个循环中完成。你需要通过来修改的JavaScript的代码如下:
    在IE中这样写:

    #myElement { filter: alpha(opacity=50); }

    在Firefox中这样写:

    #myElement { opacity: 0.5; }

    在IE中这样写:

    var myObject = document.getElementById("myElement");
    myObject.style.filter = "alpha(opacity=80)";

    在Firefox中这样写:

    var myObject = document.getElementById("myElement"); myObject.style.opacity = "0.5";
  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
  • 原文地址:https://www.cnblogs.com/sourcebank/p/3047158.html
Copyright © 2011-2022 走看看