позиционировать элемент span как добавленный в div

#javascript #jquery #html #css

#javascript #jquery #HTML #css

Вопрос:

Я делаю небольшую бесплатную игру ascii ski … возврат к игре Win95.

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

введите описание изображения здесь

Вот как это должно выглядеть (промежутки распределены случайным образом):

введите описание изображения здесь

Вот мой фрагмент кода, который генерирует препятствия с определенным интервалом и назначает абсолютное позиционирование и левое позиционирование:

 function objectFactory() {

var randObj = Math.floor((Math.random()*7) 1),
            randX = Math.floor((Math.random()*700) 1),
            randY = Math.floor((Math.random()*400) 1);

$('#myObstacles').append("<span id=""   randX   "">"   items[randObj]   "</span>");

document.getElementById(randX).style.position = "absolute";
document.getElementById(randX).style.left = randX;
document.getElementById(randX).style.top = 500;
console.log(document.getElementById(randX).style.left);
}
 

Добавленным подразделениям не присваивается left позиция:

введите описание изображения здесь

Вот как это должно выглядеть:

введите описание изображения здесь

И console.log(document.getElementById(randX).style.left); ничего не отображает.

Есть мысли?

Ответ №1:

Вам необходимо указать единицы измерения при назначении .style.left и .style.top :

 document.getElementById(randX).style.left = randX   "px";
document.getElementById(randX).style.top = "500px";
 

(Обычно я бы сказал «Или как вы используете jQuery», за которым следует пример с селектором, но id селекторы, начинающиеся с цифр, — это ЛАВАШ …)

Но отдельно: что, если два (или более) из ваших случайно созданных препятствий находятся в одном и том же randX положении? В конечном итоге вы создадите несколько одинаковых элементов id , что недопустимо.

Вместо этого просто работайте непосредственно с объектами:

 function objectFactory() {
    var randObj  = Math.floor((Math.random()*7) 1),
        randX    = Math.floor((Math.random()*700) 1),
        randY    = Math.floor((Math.random()*400) 1),
        obstacle = $("<span id=""   id   "">"   items[randObj]   "</span>");

    obstacle.css({
        position: "absolute",
        left:     randX,
        top:      500
    }).appendTo("#myObstacles");

}
 

Примечание: всякий раз, когда вы обнаруживаете, что присваиваете информацию о статическом стиле множеству элементов ( position: absolute , top: 500px ), стоит подумать, использовать ли вместо этого класс.

Комментарии:

1. Спасибо, ТИ Джей! упс, ошибка нуба