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";
  • 相关阅读:
    python3安装 feedparser
    numpy
    Git详细教程(1)---个人Git的基本使用
    JavaScript高级程序设计---学习笔记(五)
    JavaScript高级程序设计---学习笔记(四)
    JavaScript高级程序设计---学习笔记(三)
    JavaScript高级程序设计---学习笔记(二)
    JavaScript高级程序设计---学习笔记(一)
    JavaScript 基础阶段测试题
    JS实现购物车特效
  • 原文地址:https://www.cnblogs.com/sourcebank/p/3047158.html
Copyright © 2011-2022 走看看