2017-03-26 6 views
0

이 코드는 발견되었지만 어디에서 입력할지 또는 각 버튼의 위치를 ​​찾는 방법을 수정해야할지 모르겠습니다. 또한 결과 (좌표)는 어디에 표시됩니까?웹 페이지의 모든 버튼 좌표는 어떻게 찾습니까?

function findPos(obj){ 
var curleft = 0; 
var curtop = 0; 

if (obj.offsetParent) { 
do { 
    curleft += obj.offsetLeft; 
    curtop += obj.offsetTop; 
    } while (obj = obj.offsetParent); 

return {X:curleft,Y:curtop}; 
} 
} 

감사합니다.

+0

당신은 또한 단지 버튼 요소, 또는 입력 유형 버튼을 원하십니까? – RobG

답변

1

document.querySelectorAll('button')을 사용하면 웹 페이지의 모든 버튼 목록을 얻을 수 있습니다. 원하는 좌표 (현재 함수에서 반환되는 좌표)를 저장할 수 있지만 데모 용으로는 콘솔에 로그 만 저장합니다.

또한 크게 미리 계산 lefttop 특성을 가진 DOMRect을 반환 getBoundingClientRect(), 활용하여 위치 찾는 논리를 단순화 할 수 있습니다 (너무 x 및 일부 브라우저의 경우,에서 y 작업을하지만, 크롬에서 지원되지 않습니다) :

function findPosition (element) { 
 
    var rect = element.getBoundingClientRect() 
 
    return {x: rect.left, y: rect.top } 
 
} 
 

 
var allCoordinates = [].map.call(document.querySelectorAll('button'), findPosition) 
 

 
console.log(allCoordinates)
.as-console-wrapper { min-height: 100%; }
<button>First Button</button> 
 
<button>Second Button</button> 
 
<button>Third Button</button>

+0

은 결과가 '정의되지 않음'으로 표시되는 것처럼 보입니다. – NewToJS

+1

Chrome에서 'x'및 'y'가 지원되지 않습니다. 나는 당신이 사용하고있는 브라우저라고 추측하고 있습니다. 이 예제를 대신하여 더 잘 지원되는'left'와'top' 속성을 사용하도록 업데이트했습니다. – gyre

0

function getOffset(el) { 
 
    var _x = 0; 
 
    var _y = 0; 
 
    while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { 
 
     _x += el.offsetLeft - el.scrollLeft; 
 
     _y += el.offsetTop - el.scrollTop; 
 
     el = el.offsetParent; 
 
    } 
 
    return { top: _y, left: _x }; 
 
} 
 

 
var elements = document.querySelectorAll('button'); 
 
var elementsLen = elements.length; 
 

 
for(var i=0; i<elementsLen; i++) { 
 

 
    var x = getOffset(elements[i]).left; 
 
    var y = getOffset(elements[i]).top; 
 
    console.log('Position x :' +x); 
 
    console.log('Position y:' +y); 
 

 
}
#some_id_2 { 
 
    position:absolute; 
 
    left:80px; 
 
    top:45px; 
 
}
<button id="some_id_1">Some button</button> 
 
<button id="some_id_2">Some other button</button>

0

귀하의 웹 페이지에있는 모든 요소의 좌표는 xy입니다.

<label for="x">X: </label><input type="text" name="x" id="x"> 
<label for="y">Y: </label><input type="text" name="y" id="y"> 
<button id="btn1">Click to get my coordinates</button> 

<script> 
var x = document.getElementById("x"), 
    y = document.getElementById("y"); 

var btn1 = document.getElementById("btn1"); 
btn1.addEventListener("click", function() { 
    x.value = btn1.offsetLeft; 
    y.value = btn1.offsetTop; 
}); 
</script> 

예 : https://jsfiddle.net/cte52ta1/

+0

OP의 * findPos * 기능이 더 적절합니다. 이것은 질문에 대답하는 것 같지 않습니다 : "... 모든 버튼의 위치를 ​​찾으려면 *". – RobG

+0

필자는 예제에서 모든 요소의 좌표를 찾지 못한다는 것을 이해하지만, 한 요소에 대해이를 수행하는 방법을 보여주고 자신의 필요에 따라 수정/사용하도록하는 것이 더 바람직하다고 생각합니다. 어떻게 생각해? – AZee

+0

OP는 위치를 찾기 위해 이미 매우 유사한 기능을 가지고 있으며, 스크롤을 허용하지 않기 때문에 특히 좋아지지 않습니다. 또한 부모 요소 옵셋을 허용하지 않으므로 OP가 이미 알고있는 것에 아무 것도 추가하지 않습니다. – RobG