目 录
一、VUE页面
预备操作:
1、使用iview vue2组件写的表单
2、代码部分包含四个案例
具体操作:
<template>
<div>
<img ref="block" class="ewm drag" style="" @dragstart="dragstart1($event)" @dragend="dragend1($event)"
draggable="true" src="http://abt.saasqv.abtpt.com/img/ewm.d44cb15b.jpg" alt="">
<img class="pLogo drag"
src="http://saasoss.abtpt.com/QD1001/Sys_Source/logo/2020-01-16/LOGO20200116141103926957.png" ref="logo"
draggable="true" @dragstart="dragstart2($event)" @dragend="dragend2($event)" alt="">
<div class="drag" ref="name1" draggable="true" @dragstart="dragstart3($event)" @dragend="dragend3($event)" alt="">
业务员姓名</div>
<div class="drag" ref="mobile" draggable="true" @dragstart="dragstart4($event)" @dragend="dragend4($event)" alt="">
133********</div>
<Form :model="formItem" :label-width="100">
<formItem label="二维码位置X">
<InputNumber :max="10" :min="1" v-model="formItem.abtComKjLibwPostConfig.qrcodeLeft">
</InputNumber>
</formItem>
<formItem label="二维码位置Y:">
<InputNumber :max="10" :min="1" v-model="formItem.abtComKjLibwPostConfig.qrcodeTop">
</InputNumber>
</formItem>
<formItem label="公司logoX:">
<InputNumber :max="10" :min="1" v-model="formItem.abtComKjLibwPostConfig.branchLeft">
</InputNumber>
</formItem>
<formItem label="公司logoY:">
<InputNumber :max="10" :min="1" v-model="formItem.abtComKjLibwPostConfig.branchTop">
</InputNumber>
</formItem>
<formItem label="电话位置X:">
<InputNumber :max="10" :min="1" v-model="formItem.abtComKjLibwPostConfig.mobileLeft">
</InputNumber>
</formItem>
<formItem label="电话位置Y:">
<InputNumber :max="10" :min="1" v-model="formItem.abtComKjLibwPostConfig.mobileTop">
</InputNumber>
</formItem>
</Form>
</div>
</template>
<script>
export default {
data() {
return {
x1: 1,
y1: 1,
a: '',
b: '',
x2: 2,
y2: 2,
x3: 2,
y3: 2,
x4: 2,
y4: 2,
originPosX: 1,
originPosY: 1,
originPosX2: 1,
originPosY2: 1,
originPosX3: 1,
originPosY3: 1,
originPosX4: 1,
originPosY4: 1,
formItem: {
abtComKjLibwPostConfig: { //详细的具体参数
id: 47,
btagcode: "2",
sno: "ZYHB20220403142922662143",
nameLeft: 0,
nameTop: 0,
nameFontSize: 30,
nameFontColor: "#080808",
mobileLeft: 0,
mobileTop: 0,
mobileFontSize: 30,
mobileFontColor: "#0D0C0C",
branchLeft: 0,
branchTop: 0,
branchWidth: 200,
qrcodeLeft: 0,
qrcodeTop: 0,
qrcodeWidth: 150,
width: 750,
height: 1334
}
}
}
},
methods: {
// 修改坐标之 二维码
// 开始1
dragstart1(e) {
console.log('拖拽开始');
this.originPosX = e.offsetX; //记录开始拖拽元素位置
this.originPosY = e.offsetY;
console.log('offsetX:', window.event.offsetX);
console.log('offsetY:', window.event.offsetY);
this.x1 = window.event.offsetX; //记录开始拖拽鼠标位置
this.y1 = window.event.offsetY;
},
// 开始2
dragstart2(e) {
console.log('拖拽开始');
this.originPosX2 = e.offsetX; //记录开始拖拽元素位置
this.originPosY2 = e.offsetY;
console.log('offsetX:', window.event.offsetX);
console.log('offsetY:', window.event.offsetY);
this.x2 = window.event.offsetX; //记录开始拖拽鼠标位置
this.y2 = window.event.offsetY;
},
// 开始3
dragstart3(e) {
console.log('拖拽开始');
this.originPosX3 = e.offsetX; //记录开始拖拽元素位置
this.originPosY3 = e.offsetY;
console.log('offsetX:', window.event.offsetX);
console.log('offsetY:', window.event.offsetY);
this.x3 = window.event.offsetX; //记录开始拖拽鼠标位置
this.y3 = window.event.offsetY;
},
// 开始4
dragstart4(e) {
console.log('拖拽开始');
this.originPosX4 = e.offsetX; //记录开始拖拽元素位置
this.originPosY4 = e.offsetY;
console.log('offsetX:', window.event.offsetX);
console.log('offsetY:', window.event.offsetY);
this.x4 = window.event.offsetX; //记录开始拖拽鼠标位置
this.y4 = window.event.offsetY;
},
// // 结束1
dragend1() {
console.log('拖拽结束');
console.log('offsetX:', window.event.offsetX);
console.log('offsetY:', window.event.offsetY);
this.formItem.abtComKjLibwPostConfig.qrcodeLeft = window.event.offsetX; //记录结束拖拽鼠标位置
this.formItem.abtComKjLibwPostConfig.qrcodeTop = window.event.offsetY;
this.$refs.block.style.left = this.originPosX + this.formItem.abtComKjLibwPostConfig.qrcodeLeft - this.x1 + 'px'; //元素最后位置为:元素开始位置+鼠标结束拖拽位置-鼠标开始拖拽位置(当然也别忘记加单位px)
this.$refs.block.style.top = this.originPosY + this.formItem.abtComKjLibwPostConfig.qrcodeTop - this.y1 + 'px';
},
// 结束2
dragend2() {
console.log('拖拽结束');
this.formItem.abtComKjLibwPostConfig.branchLeft = window.event.offsetX; //记录结束拖拽鼠标位置
this.formItem.abtComKjLibwPostConfig.branchTop = window.event.offsetY;
this.$refs.logo.style.left = this.originPosX2 + this.formItem.abtComKjLibwPostConfig.branchLeft - this.x2 + 'px'; //元素最后位置为:元素开始位置+鼠标结束拖拽位置-鼠标开始拖拽位置(当然也别忘记加单位px)
this.$refs.logo.style.top = this.originPosY2 + this.formItem.abtComKjLibwPostConfig.branchTop - this.y2 + 'px';
},
// 结束3
dragend3() {
console.log('拖拽结束');
this.formItem.abtComKjLibwPostConfig.nameLeft = window.event.offsetX; //记录结束拖拽鼠标位置
this.formItem.abtComKjLibwPostConfig.nameTop = window.event.offsetY;
this.$refs.name1.style.left = this.originPosX3 + this.formItem.abtComKjLibwPostConfig.nameLeft - this.x2 + 'px'; //元素最后位置为:元素开始位置+鼠标结束拖拽位置-鼠标开始拖拽位置(当然也别忘记加单位px)
this.$refs.name1.style.top = this.originPosY3 + this.formItem.abtComKjLibwPostConfig.nameTop - this.y2 + 'px';
},
// 结束4
dragend4() {
console.log('拖拽结束');
this.formItem.abtComKjLibwPostConfig.mobileLeft = window.event.offsetX; //记录结束拖拽鼠标位置
this.formItem.abtComKjLibwPostConfig.mobileTop = window.event.offsetY;
this.$refs.mobile.style.left = this.originPosX4 + this.formItem.abtComKjLibwPostConfig.mobileLeft - this.x2 + 'px'; //元素最后位置为:元素开始位置+鼠标结束拖拽位置-鼠标开始拖拽位置(当然也别忘记加单位px)
this.$refs.mobile.style.top = this.originPosY4 + this.formItem.abtComKjLibwPostConfig.mobileTop - this.y2 + 'px';
},
keydown() {
console.log('keydown');
}
}
}
</script>
<style>
.drag {
width: 120px;
height: 120px;
position: relative;
}
</style>
二、Html页面[此页面有参考
链接:实现简单的元素拖拽_星空之迹的博客-CSDN博客_元素拖拽]
无预备操作,可以直接复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.drag{
background-color: aquamarine;
width: 100px;
height: 100px;
position:relative;
}
.test{
background-color: rgb(255, 14, 6);
width: 100px;
height: 100px;
color:aquamarine;
}
</style>
</head>
<body>
<div class="drag"
ondragstart="dragstart1()"
ondragend="dragend1()"
draggable="true"
>拖拽</div>
//设置元素可拖拽,并监听开始结束拖拽事件
</body>
<script>
let drag=document.getElementsByClassName('drag')[0];
let x1,x2,y1,y2,originPosX,originPosY;
let dragstart1=function(e){
console.log('拖拽开始');
console.log('drag.offsetLeft',drag.offsetLeft);
console.log('drag.offsetTop',drag.offsetTop); //因为元素位置是以左上角来计算的,点击时一般不在左上角,所以要分开计算
originPosX=drag.offsetLeft; //记录开始拖拽元素位置
originPosY=drag.offsetTop;
console.log('offsetX:',window.event.offsetX);
console.log('offsetY:',window.event.offsetY);
x1=window.event.offsetX; //记录开始拖拽鼠标位置
y1=window.event.offsetY;
}
let dragend1=function(){
console.log('拖拽结束');
console.log('offsetX:',window.event.offsetX);
console.log('offsetY:',window.event.offsetY);
x2=window.event.offsetX; //记录结束拖拽鼠标位置
y2=window.event.offsetY;
drag.style.left=originPosX+x2-x1+'px'; //元素最后位置为:元素开始位置+鼠标结束拖拽位置-鼠标开始拖拽位置(当然也别忘记加单位px)
drag.style.top=originPosY+y2-y1+'px';
}
keydown=function(){
console.log('keydown');
}
</script>
</html>
三、备注可能出错的地方
使用时候只需要修改:x1,y1,originPosX1: 1,originPosY1: 1,以及表单绑定的v-model
display记得设置,要脱离标准流