| <!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_equals( elem.nodeName, 'HTML' ); | |
| }, 'Point (0, 0), return root element(HTML)' ); | |
| test( function () { | |
| var elem = document.elementFromPoint( -1000, 0 ); | |
| assert_equals( elem, null, 'negative x, return null' ); | |
| }, ' test negative x '); | |
| test( function () { | |
| var elem = document.elementFromPoint( 0, -1000 ); | |
| assert_equals( elem, null, 'negative y, return null' ); | |
| }, ' test negative y '); | |
| test( function () { | |
| var elem = document.elementFromPoint( 100000, 0 ); | |
| assert_equals( 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> |