hrsvici412 发表于 2013-2-8 00:53:30

精通JavaScript源码2

// Find the left position of an elementfunction posX(elem) {    // Get the computed style and get the number out of the value    return parseInt( getStyle( elem, “left” ) );}// Find the top position of an elementfunction posY(elem) {    // Get the computed style and get the number out of the value    return parseInt( getStyle( elem, “top” ) );} 获取style指定elem的值:
function getStyle( elem, name ) {    if (elem.style)      return elem.style;   //IE中的方法    else if (elem.currentStyle)      return elem.currentStyle;    // W3C的方法    else if (document.defaultView && document.defaultView.getComputedStyle) {      // It uses the traditional ‘text-align’ style of rule writing, instead of textAlign      name = name.replace(/()/g,"-$1");      name = name.toLowerCase();      // Get the style object and get the value of the property (if it exists)      var s = document.defaultView.getComputedStyle(elem,"");      return s && s.getPropertyValue(name);    } else      return null;}找到elem在页面中水平X(left),垂直Y的值(top),offsetLeft方法在不同的浏览器有所不同。
// Find the X (Horizontal, Left) position of an elementfunction pageX(elem) {    var p = 0;    // We need to add up all of the offsets for every parent    while ( elem.offsetParent ) {      // Add the offset to the current count      p += elem.offsetLeft;      // and continue on to the next parent      elem = elem.offsetParent;    }    return p;}// Find the Y (Vertical, Top) position of an elementfunction pageY(elem) {    var p = 0;    // We need to add up all the offsets for every parent    while ( elem.offsetParent ) {      // Add the offset to the current count      p += elem.offsetTop;      // and continue on to the next parent      elem = elem.offsetParent;    }    return p;} 找到elem距离去父元素的位置:
// Find the horizontal positioing of an element within its parentfunction parentX(elem) {    // If the offsetParent is the element’s parent, break early    return elem.parentNode == elem.offsetParent ?      elem.offsetLeft :      // Otherwise, we need to find the position relative to the entire      // page for both elements, and find the difference      pageX( elem ) - pageX( elem.parentNode );}// Find the vertical positioing of an element within its parentfunction parentY(elem) {    // If the offsetParent is the element’s parent, break early    return elem.parentNode == elem.offsetParent ?      elem.offsetTop :      // Otherwise, we need to find the position relative to the entire      // page for both elements, and find the difference      pageY( elem ) - pageY( elem.parentNode );} 找到elem中style中left,top的值:
// Find the left position of an elementfunction posX(elem) {    // Get the computed style and get the number out of the value    return parseInt( getStyle( elem, “left” ) );}// Find the top position of an elementfunction posY(elem) {    // Get the computed style and get the number out of the value    return parseInt( getStyle( elem, “top” ) );} 设置elem left,top的值:
// A function for setting the horizontal position of an elementfunction setX(elem, pos) {    // Set the ‘left’ CSS property, using pixel units    elem.style.left = pos + “px”;}// A function for setting the vertical position of an elementfunction setY(elem, pos) {    // Set the ‘left’ CSS property, using pixel units    elem.style.top = pos + “px”;}// A function for adding a number of pixels to the horizontal// position of an element function addX(elem,pos) {    // Get the current horz. position and add the offset to it.    setX( posX(elem) + pos );}// A function that can be used to add a number of pixels to the// vertical position of an elementfunction addY(elem,pos) {    // Get the current vertical position and add the offset to it    setY( posY(elem) + pos );}  获得元素的width,height,隐藏的元素是不可以获得width和height,可以用fullHeight,fullWidth实现:
// Get the actual height (using the computed CSS) of an elementfunction getHeight( elem ) {    // Gets the computed CSS value and parses out a usable number    return parseInt( getStyle( elem, ‘height’ ) );}// Get the actual width (using the computed CSS) of an elementfunction getWidth( elem ) {    // Gets the computed CSS value and parses out a usable number    return parseInt( getStyle( elem, ‘width’ ) );}// Find the full, possible, height of an element (not the actual,// current, height)function fullHeight( elem ) {    // If the element is being displayed, then offsetHeight    // should do the trick, barring that, getHeight() will work    if ( getStyle( elem, ‘display’ ) != ‘none’ )      return elem.offsetHeight || getHeight( elem );    // Otherwise, we have to deal with an element with a display    // of none, so we need to reset its CSS properties to get a more    // accurate reading    var old = resetCSS( elem, {      display: ‘’,      visibility: ‘hidden’,      position: ‘absolute’    });    // Figure out what the full height of the element is, using clientHeight    // and if that doesn’t work, use getHeight    var h = elem.clientHeight || getHeight( elem );    // Finally, restore the CSS properties back to what they were    restoreCSS( elem, old );    // and return the full height of the element    return h;}// Find the full, possible, width of an element (not the actual,// current, width)function fullWidth( elem ) {    // If the element is being displayed, then offsetWidth    // should do the trick, barring that, getWidth() will work    if ( getStyle( elem, ‘display’ ) != ‘none’ )      return elem.offsetWidth || getWidth( elem );    // Otherwise, we have to deal with an element with a display    // of none, so we need to reset its CSS properties to get a more    // accurate reading    var old = resetCSS( elem, {      display: ‘’,      visibility: ‘hidden’,      position: ‘absolute’    });    // Figure out what the full width of the element is, using clientWidth    // and if that doesn’t work, use getWidth    var w = elem.clientWidth || getWidth( elem );    // Finally, restore the CSS properties back to what they were    restoreCSS( elem, old );    // and return the full width of the element    return w;}// A function used for setting a set of CSS properties, which// can then be restored back again laterfunction resetCSS( elem, prop ) {    var old = {};    // Go through each of the properties    for ( var i in prop ) {      // Remember the old property value      old[ i ] = elem.style[ i ];      // And set the new value      elem.style[ i ] = prop;    }    // Retun the set of changed values, to be used by restoreCSS    return old;}// A function for restoring the side effects of the resetCSS functionfunction restoreCSS( elem, prop ) {    // Reset all the properties back to their original values    for ( var i in prop )      elem.style[ i ] = prop[ i ];  
页: [1]
查看完整版本: 精通JavaScript源码2