当前位置: 首页 > 知识库问答 >
问题:

vue3中动态修改div的style?

咸高谊
2023-06-15

我怎么在move的时候让对应的样式也修改,也就是elRed.style或elGreen.style,现在不起作用。
可以跳转到这里直接看效果:
https://play.vuejs.org/#eNqlVW1r2zAQ/is3U4gDmdPto5eWbnSMwcZg7...

<template>
  <div
      :style="[elRed.style, { background: 'red' }]"
      @mousedown="startDrag(elRed, $event)"
      :class="{ dragging: elRed.isDragging }"
  >
    Drag me! I am at {{ elRed.x }}, {{ elRed.y }}
  </div><br/>
  <div
      :style="[elGreen.style, { background: 'green' }]"
      @mousedown="startDrag(elGreen, $event)"
      :class="{ dragging: elGreen.isDragging }"
  >
    Drag me! I am at {{ elGreen.x }}, {{ elGreen.y }}
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

function useDraggable() {
  const x = ref(0);
  const y = ref(0);
  const style=ref({
    position: 'fixed',
    transform: 'translate(10px, 10px)',
  })
  const isDragging = ref(false);

  const start = (event) => {
    isDragging.value = true;
  };

  const move = (event) => {
    if (isDragging.value) {
      x.value = event.clientX;
      y.value = event.clientY;
      style.value = {
        position: 'fixed',
        transform: `translate(${x.value}px, ${y.value}px)`,
      };

    }
  };
  const handelStyle=()=>{
    return {
      position: 'fixed',
      transform: `translate(${x.value}px, ${y.value}px)`,
    }
  }
  const end = () => {
    isDragging.value = false;
  };

  return {
    x,
    y,
    style: {
      position: 'fixed',
      transform: `translate(${x.value}px, ${y.value}px)`,
    },
    handelStyle,
    isDragging,
    start,
    move,
    end,
  };
}

const elRed = useDraggable();
const elGreen = useDraggable();

const startDrag = (dragObj, event) => {
  event.preventDefault();
  dragObj.start(event);
  document.addEventListener('mousemove', dragObj.move);
  document.addEventListener('mouseup', stopDrag);
};

const stopDrag = (event) => {
  elRed.end();
  elGreen.end();
  document.removeEventListener('mousemove', elRed.move);
  document.removeEventListener('mousemove', elGreen.move);
};

</script>

<style>
.dragging {
  cursor: move;
}
</style>

共有1个答案

姬和豫
2023-06-15
import {ref,reactive} from 'vue';
const elRed = reactive(useDraggable());
const elGreen = reactive(useDraggable());

然后你style return出去的时候,应该是用那个有ref的部分,而不是静态的对象

 类似资料:
  • 现在需要动态获取dom列表的高度,该列表是后台返回的数据,数据条数是不固定的。目前设置的动画效果是写死的高度,根据该高度做动画滚动,现在要把该高度改成动态的值。 已经尝试过的方法:roll.value.styleSheets,发现该属性获取不到@keyframes

  • 大佬帮忙修改一下面的代码,鼠标可以分别拖拽div,并且不超过窗口的边界。 https://play.vuejs.org/#eNqlVW1r2zAQ/is3U4gDmdPto5eWbnSMwcZg7...

  • 为什么执行 时只有最后一个元素发生了变化?

  • 本文向大家介绍php中动态修改ini配置,包括了php中动态修改ini配置的使用技巧和注意事项,需要的朋友参考一下 1,运行时改变配置 在前一篇中曾经谈到,ini_set函数可以在php执行的过程中,动态修改php的部分配置。注意,仅仅是部分,并非所有的配置都可以动态修改。关于ini配置的可修改性,参见:http://php.net/manual/zh/configuration.changes.

  • 本文向大家介绍聊聊Vue 中 title 的动态修改问题,包括了聊聊Vue 中 title 的动态修改问题的使用技巧和注意事项,需要的朋友参考一下  由于之前的 Vue 项目打包成果物一直是嵌入集成平台中,所以一直没有关注过项目的 title。直到最近,突然有个需求,要求点击按钮在集成平台外新开一个页面,此时我才发现,原来我的项目的 title 一直是万年不变的 vue-project。理所应当的

  • 自1.14.0开始,zuul网关支持动态修改请求参数。即在网关修改客户端传递过来的参数,然后发送到微服务端。 客户端参数{"name": "jim"} --> zuul中修改为{"name": "Lucy"} --> 微服务端将收到{"name": "Lucy"} 使用场景:客户端请求参数经过加密,在网关解密后,再次发送明文参数给微服务端 如何使用 在网关springboot启动函数中添加如下代