133 lines
3.4 KiB
Vue
133 lines
3.4 KiB
Vue
<template>
|
|
<view class="pop-service d-c d-c-c" :style="{ left: `${x}px`, top: `${y}px` }" @click="gotoService"
|
|
@touchstart="handleTouchStart" @touchmove="handleTouchMove" @touchend="handleTouchEnd">
|
|
<image class="pop-service-image" src="/static/images/service.gif" mode=""></image>
|
|
<view class="pop-service-text tc">{{ $t('w_0023') }}</view>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
iosAudig: -1,
|
|
startX: 0,
|
|
startY: 0,
|
|
x: 295, // 元素的x坐标
|
|
y: 100, // 元素的y坐标
|
|
scale: 1, // 元素的缩放比例
|
|
initialX: 0,
|
|
initialY: 0
|
|
};
|
|
},
|
|
methods: {
|
|
gotoService() {
|
|
let userInfo = uni.getStorageSync("User");
|
|
let src =
|
|
"https://im1c5366d.7x24cc.com/phone_webChat.html?accountId=N000000033467&chatId=302384fb-eda1-436e-a5e9-c03a2dbd6e97&visitorId=" +
|
|
userInfo.memberCode +
|
|
"&nickName=" +
|
|
userInfo.memberCode;
|
|
window.open(src, "_blank");
|
|
},
|
|
gotoWeb(url) {
|
|
this.gotoPage('/pages/webview/webview?url=' + encodeURIComponent(url));
|
|
},
|
|
handleTouchStart(event) {
|
|
// 记录元素的初始位置
|
|
this.initialX = event.changedTouches[0].clientX;
|
|
this.initialY = event.changedTouches[0].clientY;
|
|
},
|
|
handleTouchMove(event) {
|
|
// 计算拖动的距离
|
|
const deltaX = event.changedTouches[0].clientX - this.initialX;
|
|
const deltaY = event.changedTouches[0].clientY - this.initialY;
|
|
// 更新元素的位置和缩放比例
|
|
this.x += deltaX;
|
|
this.y += deltaY;
|
|
|
|
// 更新元素的初始位置为最后一次拖动的结束位置
|
|
this.initialX = event.touches[0].clientX;
|
|
this.initialY = event.touches[0].clientY;
|
|
event.preventDefault(); // 阻止默认行为,防止触发点击事件
|
|
},
|
|
handleTouchEnd(event) {
|
|
|
|
console.log('handleTouchEnd');
|
|
console.log(this.x);
|
|
console.log(this.y);
|
|
if (this.x >= 343) {
|
|
this.x = 343;
|
|
}
|
|
if (this.x <= -30) {
|
|
this.x = -30;
|
|
}
|
|
// if (this.y >= 343) {
|
|
// this.y = 343;
|
|
// }
|
|
if (this.y <= -30) {
|
|
this.y = -30;
|
|
}
|
|
// 在这里记录第一次拖动的结束位置,以便第二次拖动时使用
|
|
// this.initialX = event.changedTouches[0].clientX;
|
|
// this.initialY = event.changedTouches[0].clientY;
|
|
},
|
|
handleDrag(e) {
|
|
// 获取拖动元素的当前位置
|
|
var x = event.clientX;
|
|
var y = event.clientY;
|
|
|
|
// 计算拖动的距离
|
|
var dx = x - startX;
|
|
var dy = y - startY;
|
|
|
|
// 更新元素的位置
|
|
this.x = startX + dx + 'px';
|
|
this.y = startY + dy + 'px';
|
|
|
|
// 判断是否达到拖动阈值,并触发拖动事件
|
|
if (Math.abs(dx) > dragThreshold || Math.abs(dy) > dragThreshold) {
|
|
// 触发拖动事件,传递拖动的距离和方向信息
|
|
dispatchEvent(event);
|
|
}
|
|
e.preventDefault(); // 阻止默认行为,防止触发点击事件
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style lang="less" scoped>
|
|
.tc{
|
|
text-align: center;
|
|
}
|
|
.d-c {
|
|
flex-direction: column;
|
|
}
|
|
.d-c-c{
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
.pop-service {
|
|
position: fixed;
|
|
top: 20%;
|
|
right: 39rpx;
|
|
width: 138rpx;
|
|
box-sizing: border-box;
|
|
background: rgba(#ffffff, 0.45);
|
|
padding: 18rpx 20rpx;
|
|
border-radius: 20rpx;
|
|
z-index: 101;
|
|
touch-action: none;
|
|
|
|
.pop-service-image {
|
|
width: 54rpx;
|
|
height: 54rpx;
|
|
margin-bottom: 15rpx;
|
|
}
|
|
|
|
.pop-service-text {
|
|
font-size: 20rpx;
|
|
color: #333;
|
|
}
|
|
}
|
|
</style> |