<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端可以拖拽的悬浮窗口demo
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 使用阿里云直播sdk demo ,支持直播,点播 视频直播与悬浮窗小窗口无缝衔接切换(一般拉流格式 rtmp m3...
- 基于react实现的移动端的可吸附悬浮按钮 预览地址(移动端): https://kkfor.github.io/...