Làm thế nào để định vị một DIV trong một tọa độ cụ thể?


120

Tôi muốn đặt DIV ở một tọa độ cụ thể? Làm thế nào tôi có thể làm điều đó bằng cách sử dụng Javascript?

Câu trả lời:


170

Tập lệnh lefttopthuộc tính của nó là số pixel từ cạnh trái và cạnh trên tương ứng. Nó phải cóposition: absolute;

var d = document.getElementById('yourDivId');
d.style.position = "absolute";
d.style.left = x_pos+'px';
d.style.top = y_pos+'px';

Hoặc làm nó như một hàm để bạn có thể đính kèm nó vào một sự kiện như onmousedown

function placeDiv(x_pos, y_pos) {
  var d = document.getElementById('yourDivId');
  d.style.position = "absolute";
  d.style.left = x_pos+'px';
  d.style.top = y_pos+'px';
}

Tôi lấy tọa độ x, y từ nhấp chuột, làm cách nào để hiển thị Div ở vị trí của chuột?
Adham

@adham bạn đã có tọa độ x, y chưa? Chỉ cần áp dụng chúng thay cho x_pos,y_pos
Michael Berkowski

nó luôn làm tròn vị trí ... có thể đặt vị trí như 1,6 thay vì nó trở thành 2 hoặc 1.
Muhammad Umer

điều gì sẽ xảy ra nếu chúng ta có dây quấn, (x1, y2) (x2, y2) (x3, y3) (x4, y4)?
John dey

Tôi đang làm điều tương tự nhưng div của tôi không được định vị gần dây buộc chuột của tôi. Tuy nhiên, nó di chuyển đến vị trí bắt đầu trên cùng của trang chính sau tiêu đề. Ý tôi là Div chính. Ai đó có thể giúp tôi hiểu tại sao không?
JNPW

32

Bạn không cần phải sử dụng Javascript để làm điều này. Sử dụng css cũ thuần túy:

div.blah {
  position:absolute;
  top: 0; /*[wherever you want it]*/
  left:0; /*[wherever you want it]*/
}

Nếu bạn cảm thấy mình phải sử dụng javascript hoặc đang cố gắng thực hiện điều này động Sử dụng JQuery, điều này ảnh hưởng đến tất cả các div của lớp "blah":

var blahclass =  $('.blah'); 
blahclass.css('position', 'absolute');
blahclass.css('top', 0); //or wherever you want it
blahclass.css('left', 0); //or wherever you want it

Ngoài ra, nếu bạn phải sử dụng javascript cũ thông thường, bạn có thể lấy bằng id

var domElement = document.getElementById('myElement');// don't go to to DOM every time you need it. Instead store in a variable and manipulate.
domElement.style.position = "absolute";
domElement.style.top = 0; //or whatever 
domElement.style.left = 0; // or whatever

gì? bạn nên sử dụng .class thay vì myElement và top & left thay vì x & y, phải không bạn?
TMS

Ngoài việc nhận được một tham chiếu đến một phần tử HTML với document.getElemtentById(), bạn cũng có thể tham khảo nó với một jQuery giống như chọn tùy ý với document.querySelector () và nhiều biến thể của nó
Shammel Lee

9

Và nó phụ thuộc nếu tất cả những gì bạn muốn là định vị một div và sau đó không có gì khác, bạn không cần phải sử dụng java script cho việc đó. Bạn chỉ có thể đạt được điều này bằng CSS. Điều quan trọng là liên quan đến vùng chứa nào bạn muốn định vị div của mình, nếu bạn muốn định vị nó so với nội dung tài liệu thì div của bạn phải được định vị tuyệt đối và vùng chứa của nó không được định vị tương đối hoặc tuyệt đối, trong trường hợp đó div của bạn sẽ được định vị so với thùng chứa.

Ngược lại với Jquery nếu bạn muốn định vị một phần tử so với tài liệu, bạn có thể sử dụng phương thức offset ().

$(".mydiv").offset({ top: 10, left: 30 });

nếu tương đối để bù đắp vị trí cha thì tương đối hoặc tuyệt đối của cha. sau đó sử dụng sau ...

var pos = $('.parent').offset();
var top = pos.top + 'no of pixel you want to give the mydiv from top relative to parent';
var left = pos.left + 'no of pixel you want to give the mydiv from left relative to parent';

$('.mydiv').css({
  position:'absolute',
  top:top,
  left:left
});

Tuyệt vời @Ehtesham Nó thực sự đã giúp tôi.
RN Kushwaha

2

Bạn cũng có thể sử dụng thuộc tính css cố định vị trí.

<!-- html code --> 
<div class="box" id="myElement"></div>

/* css code */
.box {
    position: fixed;
}

// js code

document.getElementById('myElement').style.top = 0; //or whatever 
document.getElementById('myElement').style.left = 0; // or whatever

2

Đây là một bài viết được mô tả đúng và cũng là một mẫu có mã. Tọa độ JS

Theo yêu cầu. dưới đây là mã được đăng cuối cùng trong bài viết đó. Cần gọi hàm getOffset và truyền phần tử html trả về các giá trị trên cùngbên trái của nó .

function getOffsetSum(elem) {
  var top=0, left=0
  while(elem) {
    top = top + parseInt(elem.offsetTop)
    left = left + parseInt(elem.offsetLeft)
    elem = elem.offsetParent        
  }

  return {top: top, left: left}
}


function getOffsetRect(elem) {
    var box = elem.getBoundingClientRect()

    var body = document.body
    var docElem = document.documentElement

    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft

    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0

    var top  = box.top +  scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft

    return { top: Math.round(top), left: Math.round(left) }
}


function getOffset(elem) {
    if (elem.getBoundingClientRect) {
        return getOffsetRect(elem)
    } else {
        return getOffsetSum(elem)
    }
}

0

Tôi đã đóng cái nôi này và thêm 'px'; Hoạt động rất tốt.

function getOffset(el) {
  el = el.getBoundingClientRect();
  return {
    left: (el.right + window.scrollX ) +'px',
    top: (el.top + window.scrollY ) +'px'
  }
}
to call: //Gets it to the right side
 el.style.top = getOffset(othis).top ; 
 el.style.left = getOffset(othis).left ; 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.