vue移动端项目拖拽客服组件

记录一下第一次封装组件
<template>
  <div  ref="kefu" class="kefu"
      @touchstart="touchstart"
      @touchend="touchend"
      @touchmove="mousemove">
    <slot>

    </slot>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  props: {
  },
  data() {
    return {
      falg: false,
    };
  },
  mounted() {},
  methods: {
    touchstart() {
      this.falg = true;
      this.$refs.kefu.style.transition="none";
    },
    touchend() {
      this.falg = false;
      this.$refs.kefu.style.transition="all 1s";
      let left = this.$refs.kefu.offsetLeft;
      let screenWidth = window.screen.width;
      let oWidth = this.$refs.kefu.offsetWidth;
      if (left + oWidth / 2 <= screenWidth / 2) {
        this.$refs.kefu.style.left = -oWidth / 2 + "px";
      } else {
        this.$refs.kefu.style.left = screenWidth  -oWidth / 2  + "px";
      }
    },
    mousemove(e) {
      if (this.falg) {
        let clientY = e.targetTouches[0].clientY;
        let clientX = e.targetTouches[0].clientX;
        let offsetHeight = this.$refs.kefu.offsetHeight;
        let offsetWidth = this.$refs.kefu.offsetWidth;
        let top = clientY - offsetHeight / 2;
        let left = clientX - offsetWidth / 2;
        // 屏幕得宽度
        let screenWidth = window.screen.width;
        let screenHeight = window.screen.height;
        let maxTop = screenHeight - offsetHeight;
        let maxLeft = screenWidth - offsetWidth;
        console.log(screenHeight);
        if (top <= 0) {
          top = 0;
        }
        if (top > maxTop) {
          top = maxTop;
        }
        if (left <= 0) {
          left = 0;
        }
        left = left > maxLeft ? maxLeft : left;

        this.$refs.kefu.style.top = top + "px";
        this.$refs.kefu.style.left = left + "px";
      }
    },
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.kefu {
  position: fixed;
}
</style>
posted @   岁月丷  阅读(296)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示