| <!DOCTYPE HTML> |
| <html lang="en-US"> |
| <head> |
| <title>CSS Test: CSSOM View elementFromPoint</title> |
| <meta charset="UTF-8"> |
| <link rel="author" title="Chris" href="mailto:pwx.frontend@gmail.com" /> |
| <link rel="help" href="https://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint" /> |
| <meta name="flags" content="dom" /> |
| <script src="../../../../../resources/testharness.js" type="text/javascript"></script> |
| <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> |
| </head> |
| <body> |
| <noscript>Test not run - JavaScript required!</noscript> |
| <div id="log"></div> |
| <script type="text/javascript"> |
| |
| var body = document.getElementsByTagName( 'body' )[0]; |
| function createElement( id ) { |
| var elem = document.createElement( 'div' ); |
| if ( id && typeof id == 'string' ) { |
| elem.id = id; |
| } |
| body.appendChild( elem ); |
| return elem; |
| } |
| |
| function setPosition( config ) { |
| var target = config.target; |
| target.style.position = 'absolute'; |
| target.style.left = config.left + 'px'; |
| target.style.top = config.top + 'px'; |
| target.style.width = config.width + 'px'; |
| target.style.height = config.height + 'px'; |
| if ( config['z-index'] ) { |
| target.style.zIndex = config['z-index']; |
| } |
| } |
| |
| var target = createElement( 'dom-1' ); |
| setPosition( { |
| width: 100, |
| height: 100, |
| left: 10, |
| top: 10, |
| target: target |
| }); |
| |
| test( function () { |
| assert_inherits( document, 'elementFromPoint' ); |
| }, 'document.elementFromPoint'); |
| |
| test( function () { |
| assert_true( document.elementFromPoint instanceof Function ); |
| }, 'document.elementFromPoint is a Function'); |
| (function(){ |
| var wrap = [ |
| // 左上角. |
| {x: 10, y: 10, r: 'top left corner'}, |
| // 上边线 |
| {x: 50, y: 10, r: 'top line'}, |
| // 右上角 |
| {x: 110, y: 10, r: 'top right corner'}, |
| // 左边线 |
| {x: 10, y: 50, r: 'left line'}, |
| // 元素范围内 |
| {x: 50, y: 50, r: 'inside'}, |
| // 右边线 |
| {x: 110, y: 50, r: 'right line'}, |
| // 左下角 |
| {x: 10, y: 110, r: 'bottom left corner'}, |
| // 下边线 |
| {x: 50, y: 110, r: 'bottom line'}, |
| // 右下角 |
| {x: 110, y: 110, r: 'bottom right corner'} |
| ]; |
| var i = 0, len = wrap.length, item; |
| for ( ; i < len; i++ ) { |
| item = wrap[ i ]; |
| test( function () { |
| assert_equals( document.elementFromPoint( item.x, item.y).id == 'dom-1', true ); |
| }, 'test some point of the element: ' + item.r); |
| } |
| })(); |
| test( function () { |
| var elem = document.elementFromPoint( 0, 0 ); |
| assert_true( elem.nodeName == 'HTML' ); |
| }, 'Point (0, 0), return root element(HTML)' ); |
| |
| test( function () { |
| var elem = document.elementFromPoint( -1000, 0 ); |
| assert_true( elem == null, 'negative x, return null' ); |
| }, ' test negative x '); |
| |
| test( function () { |
| var elem = document.elementFromPoint( 0, -1000 ); |
| assert_true( elem == null, 'negative y, return null' ); |
| }, ' test negative y '); |
| |
| test( function () { |
| var elem = document.elementFromPoint( 100000, 0 ); |
| assert_true( elem == null ); |
| }, 'test outside of viewport'); |
| |
| test( function () { |
| var config = { |
| width: 100, |
| height: 100, |
| left: 5, |
| top: 5 |
| }; |
| var target2 = createElement( 'dom-2' ); |
| config.target = target2; |
| setPosition( config ); |
| |
| var elem = document.elementFromPoint( 10, 10 ); |
| var elem2 = document.elementFromPoint( 10, 10 ); |
| assert_equals( elem.id, elem2.id ); |
| }, 'test the top of layer'); |
| </script> |
| </body> |
| </html> |