Як розташувати DIV у конкретних координатах?


120

Я хочу розташувати DIV у певних координатах? Як я можу це зробити за допомогою Javascript?

Відповіді:


170

Накресліть його leftта topвластивості як кількість пікселів відповідно з лівого та верхнього краю. Це повинно бутиposition: absolute;

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

Або виконайте це як функцію, щоб ви могли приєднати його до подібної події 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';
}

Я отримую координати x, y за допомогою клацання миші, як я можу відобразити Div у положенні миші?
Adham

@adham у вас вже є координати x, y? Просто застосуйте їх замість x_pos,y_pos
Michael Berkowski

він округляє позицію завжди ... чи можна встановити позицію на зразок 1.6 замість того, щоб вона стала 2 або 1.
Мухаммед Умер

що робити, якщо у нас є кординати, (x1, y2) (x2, y2) (x3, y3) (x4, y4)?
Джон Дей

Я роблю точно те саме, але мій дів не розміщується біля кординату моєї миші. Однак він переміщується до верхнього початкового положення головної сторінки після заголовка. Я маю на увазі майстра Div. Може хтось допоможе мені зрозуміти, чому?
JNPW

32

Для цього вам не потрібно використовувати Javascript. Використання звичайного старого css:

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

Якщо вам здається, що ви повинні використовувати javascript або намагаєтеся робити це динамічно, використовуючи JQuery, це впливає на всі диви класу "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

Крім того, якщо вам потрібно використовувати звичайний старий JavaScript, ви можете схопити його за 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

що? ви повинні використовувати .class замість myElement, а top & left замість x & y, чи не варто?
TMS

Окрім отримання посилання на HTML-елемент document.getElemtentById(), ви можете також посилатись на нього довільним селектором jQuery з document.querySelector () та його багатьма варіаціями
Shammel Lee

9

ну це залежить, якщо все, що ви хочете, - це розміщення діва, а потім нічого іншого, вам не потрібно використовувати для цього сценарій java. Домогтися цього можна лише за допомогою CSS. Що важливо, це відносно того, який контейнер ви хочете розмістити у вашому div, якщо ви хочете розташувати його відносно тіла документа, тоді ваш div повинен бути розміщений абсолютним, а його контейнер не повинен розташовуватися відносно або абсолютно, у такому випадку ваш div буде розміщений відносно контейнера.

В іншому випадку з Jquery, якщо ви хочете розташувати елемент відносно документа, ви можете використовувати метод offset ().

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

якщо відносно зсувного батьківського положення, то батьківський відносний або абсолютний. потім використовуйте наступне ...

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
});

Чудово @Ehtesham Це мені дуже допомогло.
RN Kushwaha

2

Ви також можете використовувати властивість css з фіксованою позицією.

<!-- 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

Ось правильно описана стаття, а також зразок з кодом. Координати JS

Відповідно до вимоги. нижче - код, який нарешті розміщений у цій статті. Потрібно викликати функцію getOffset і передавати html-елемент, який повертає його верхнє та ліве значення.

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

Я заробив це і додав 'px'; Працює дуже добре.

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 ; 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.