美文网首页
pc端可以拖拽的悬浮窗口demo

pc端可以拖拽的悬浮窗口demo

作者: 泪滴在琴上 | 来源:发表于2023-11-26 11:48 被阅读0次
<template>
  <div
    class="floating-button"
    :style="{
      position: 'fixed',
      right: buttonStyle.right,
      top: buttonStyle.top,
      transform: buttonStyle.transform,
    }"
    @mousedown="startDrag"
    @click="gotoAI"
  >
    <img src="@/static/images/kefu1.png" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      buttonStyle: {
        position: "fixed",
        right: "2px",
        top: "400px",
        zIndex: 999,
      },
      dragging: false,
      initialX: 0,
      initialY: 0,
      offsetX: 0,
      offsetY: 0,
      messageDialog: false,
    };
  },
  methods: {
    gotoAI() {
      this.messageDialog = !this.messageDialog;
      this.$emit("gotoAI", this.messageDialog);
      // this.$router.push(`/message.html`);
    },
    startDrag(event) {
      console.log("-------startDrag------", event);
      event.preventDefault(); // 阻止默认行为
      this.dragging = true;
      // 记录初始触摸位置
      this.initialX = event.clientX;
      this.initialY = event.clientY;

      // 记录当前偏移量
      this.offsetX = parseInt(this.buttonStyle.right.slice(0, -2));
      this.offsetY = parseInt(this.buttonStyle.top.slice(0, -2));
      // 绑定mousemove和mouseup事件
      document.addEventListener("mousemove", this.onDrag);
      document.addEventListener("mouseup", this.endDrag);
    },
    onDrag(event) {
      console.log("-------onDrag------", event);
      event.preventDefault(); // 阻止默认行为
      if (this.dragging) {
        // 计算偏移量
        const deltaX = event.clientX - this.initialX;
        const deltaY = event.clientY - this.initialY;
        // 更新按钮位置
        this.buttonStyle.right = `${this.offsetX - deltaX}px`;
        this.buttonStyle.top = `${this.offsetY + deltaY}px`;
      }
    },
    endDrag(event) {
      event.preventDefault(); // 阻止事件的默认行为
      event.stopPropagation();
      this.dragging = false;
      document.removeEventListener("mousemove", this.onDrag);
      document.removeEventListener("mouseup", this.endDrag);
    },
  },
};
</script>
<style scoped>
.floating-button {
  width: 50px;
  height: fit-content;
  opacity: 0.9;
}

.floating-button img {
  width: 100%;
  height: auto;
  display: block;
}
</style>

相关文章

  • 移动端和pc端的拖拽事件

    pc端拖拽事件 移动端的拖拽事件 移动端的拖拽事件的思路是当手指点下记录手指的坐标和box的位置。当手指移动的时候...

  • 移动端入门篇之拖拽

    移动端的拖拽基本和pc端差不断,就是onmousedown、onmousemove、onmouseup,有些不同 ...

  • 仿苹果手机客户端悬浮按钮 assisTouchButton

    仿苹果手机客户端悬浮按钮 assisTouchButton 可以自定义按钮背景图片,颜色,触发事件,可以任意拖拽最...

  • pc端手机浏览器端点击QQ在线弹出窗口对话

    pc端手机浏览器端点击QQ在线弹出窗口对话 pc端: 手机浏览器端:

  • 可拖拽div

    一个在移动端及PC端都可以使用的拖拽函数。 使用方法 需要先设置position属性,absolute relat...

  • HTML5拖拽上传

    传统拖拽效果小demohtml5实现拖拽小demo调查问卷小demo拖拽拼图小demo拖拽上传小demo h5拖拽...

  • 原生js-横向字幕无缝滚动

    功能:横向滚动,鼠标悬浮停止,离开继续滚动,支持pc端和移动端 效果图: css: html: js:

  • “吐个槽”产品分析体验报告

    1. 产品概述 1.1 体验环境 体验Demo:用户pc端、移动端Demo(也有天天快报上的“意见反馈”) 体验时...

  • 前端自适应问题

    自适应问题 PC端随屏幕分辨率与窗口大小自适应 参考文献 vue项目PC端随屏幕分辨率与窗口大小自适应[https...

  • 文件拖拽

    文件拖拽ondragover 拖拽文件进入窗口 (不断执行)ondragenter 拖拽文件进入窗口 ...

网友评论

      本文标题:pc端可以拖拽的悬浮窗口demo

      本文链接:https://www.haomeiwen.com/subject/jxeawdtx.html