Измените положение DIV на статическую секцию DOM

#javascript #css #vue.js #position #css-position

Вопрос:

У меня есть приложение vue, в котором я создал несколько методов для перемещения моего div «инструментария» в другой раздел DOM. В настоящее время DIV загружается в правом нижнем углу экрана и статичен, он не перемещается, если я прокручиваю страницу.

Методы, которые я создал, пытаются достичь того же самого, но перемещают DIV в «Верхний левый», «Верхний правый», «Нижний левый», и у меня возникают некоторые проблемы с поиском правильного значения px для заданных функций. Кто-нибудь знает, есть ли лучший способ сделать это?

Мой код:

   <button @click="changePositionTopLeft">Move Top Left</button>
  <button @click="changePositionTopRight">Move Top Right</button>
  <button @click="changePositionBottomLeft">Move Bottom Left</button>


methods: {
changePositionTopLeft() {
  const divPosition = document.getElementById('sdk-ts-root')
  divPosition.style.left = '200px'
  divPosition.style.top = '200px'
},
changePositionTopRight() {
  const divPosition = document.getElementById('sdk-ts-root')
  divPosition.style.right = '400px'
  divPosition.style.top = '400px'
},
changePositionBottomLeft() {
  const divPosition = document.getElementById('sdk-ts-root')
  divPosition.style.left = '400px'
  divPosition.style.bottom = '400px'
}
 

}
}

Ответ №1:

При использовании Vue (или любой другой подобной библиотеки, такой как React, Svelte и т.д.), Вы не должны напрямую взаимодействовать с DOM, а скорее создавать привязки данных, которые автоматически обновят ваш HTML.

Вот как это должно быть сделано с помощью «способа Vue».:

 let app = new Vue({
  el: '#app',
  data: {
    top: 0,
    right: 0,
    bottom: 0,
    left: 0,

  },
  computed: {
    style() {
      return `top: ${this.top}px; right: ${this.right}px; bottom: ${this.bottom}px; left: ${this.left}px;`
    }
  },
  methods: {
    changePositionTopLeft() {
      this.top = 200
      this.left = 200
    },
    changePositionTopRight() {
      this.top = 400
      this.right = 400
    },
    changePositionBottomLeft() {
      this.bottom = 400,
        this.left = 400
    },
    reset() {
      this.top = 0;
      this.right = 0;
      this.bottom = 0;
      this.left = 0;
    }
  }
}) 
 #app {
  position: relative;
  height: 500px;
}

.el {
  position: absolute;
  
  /* some styling */
  height: 50px;
  width: 50px;
  background-color: red;
  color: white;
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
    <div :style="style" class="el">DIV</div>
    <button @click="changePositionTopLeft">Move Top Left</button>
    <button @click="changePositionTopRight">Move Top Right</button>
    <button @click="changePositionBottomLeft">Move Bottom Left</button>
    <button @click="reset">Reset</button>
    top: {{top}} right: {{right}} top: {{bottom}} left: {{left}}
</div> 

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

1. Спасибо за ваши отзывы, и вы правы, я должен использовать этот формат для своего приложения vue. Расположение DIV по — прежнему работает не так, как ожидалось. В основном мой вопрос заключается в том, есть ли значение по умолчанию «px», чтобы установить div в верхнее левое/правое или нижнее левое/правое.