**这段代码有两个问题:
1\这 change-col-w类加了hover 显示 下面的img, 第一个td 不起作用(更改一次列宽后),第二个至最后,Hover 有效
第一个TD 拖动了更改一次列宽后 Hover就失效了,后面的 TD hover 一直有效
2\ img 是鼠标拖动用的图标, 但拖动 图标 就 拉出一个新网页面来,新网页显示这个图标**
<!-- 列号 ------------------------->
<td v-for="(i, index) in tableJson.cols" :key="index">
// 这个 change-col-w类加了hover 显示 下面的img DOM
<div class="change-col-w" @mousedown.left="changeColWidth($event, index)">
// 这img 是用来鼠标拖动的图标,但拖动 图标 就 拉出一个新网页面来,新网页显示这个图标,
<img src='../../assets/img/changeCOL.svg' class="v-line-svg" />
</div>
</td>
// 拖动改变列宽
let initPointX = 0, initPointY = 0, initLine = 0, vLine: HTMLDivElement, initWidth: number, colNumber: number
let moveWidth = 0, moveHeight = 0, colSVG: HTMLImageElement, crrCOL: HTMLTableCellElement
function changeColWidth(event: any, index: number) {
console.log(event)
colNumber = index // 当前列号
const form_table = document.getElementById('form_table') as HTMLTableElement
colSVG = form_table.querySelector('.v-line-svg') as HTMLImageElement // SVG图标
crrCOL = form_table.querySelectorAll('.col-letter')[index] as HTMLTableCellElement // 当前列 TD dom
vLine = form_table.querySelector('.v-line') as HTMLDivElement // 竖线
initLine = crrCOL.offsetLeft + crrCOL.offsetWidth - 0.5 // 竖线出现的位置
initWidth = crrCOL.offsetWidth // 当前列初始宽度
initPointX = event.clientX // x初始位置
initPointY = event.clientY // Y初始位置
vLine.style.visibility = 'visible' // 竖线显示
vLine.style.height = (ref_table.value as HTMLTableElement).offsetHeight + 'px'
vLine.style.left = initLine + 'px'
document.addEventListener("mousemove", colWidthMousemove) //监听鼠标移动事件
document.addEventListener("mouseup", colWidthMouseup) //监听鼠标抬起事件
}
function colWidthMousemove(event: any) {
updateCellRange(sDOM, eDOM) // 更新选择框的大小
moveWidth = event.clientX - initPointX // 移动的距离
moveHeight = event.clientY - initPointY
vLine.style.left = initLine + moveWidth + 'px'
colSVG.style.top = 8 + moveHeight + 'px' // 上下位置随鼠标称动变化
console.log('鼠标水平移动的距离', moveWidth)
if ((initWidth + moveWidth) < 20) {
tableJson.value.cols[colNumber] = 20
} else {
tableJson.value.cols[colNumber] = initWidth + moveWidth
}
}
// 扡动列宽图标div
.change-col-w {
position: absolute;
background-color: green;
width: 8px;
height: 24px;
top: 0px;
right: -3px;
z-index: 1;
// pointer-events: none;
}
.v-line-svg {
position: absolute;
display: none;
width: 20px;
top: 0;
left: 0;
z-index: 1;
user-select: none;
-webkit-user-drag: none;
// background-image: url('../../assets/img/changeCOL.svg');
}
}
.change-col-w:hover>.v-line-svg {
display: block;
left: -4px;
top: 8px;
-webkit-user-drag: none;
}
<!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>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.js"></script>
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<style>
.change-col-w {
border: 1px solid #f00;
width: 100px;
height: 100px;
}
.change-col-w:hover .v-line-svg {
display: inline-block
}
.v-line-svg {
width: 100px;
height: 100px;
display: none;
-webkit-user-drag: none;
}
</style>
</head>
<body>
<div id="app">
<table>
<td v-for="(i, index) in tableJson.cols" :key="index">
<!-- // 这个 change-col-w类加了hover 显示 下面的img DOM -->
<div class="change-col-w" @mousedown.left="changeColWidth($event, index)">
<!-- // 这img 是用来鼠标拖动的图标,但拖动 图标 就 拉出一个新网页面来,新网页显示这个图标, -->
<img src='./R-C.jpg' class="v-line-svg" />
</div>
</td>
</table>
</div>
<script>
var app = new Vue({
el: '#app',
data() {
return {
tableJson: {
cols: [1, 2, 3, 4]
}
};
},
methods: {
changeColWidth(e, index) {
console.log(e, index);
}
},
mounted() {
}
})
</script>
</body>
</html>
禁止页面中的文本和图标等内容随着鼠标拖动被选中
body, img {
/* 禁止文本图标被鼠标拖动选中 */
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
user-select: none;
/* 设置图片不可拖动*/
-moz-user-drag: none; /*火狐*/
-webkit-user-drag: none; /*webkit浏览器*/
-ms-user-drag: none; /*IE10*/
-khtml-user-drag: none; /*早期浏览器*/
user-drag: none;
}
从这个代码看不出什么问题,从你的表述来看,第一个问题应该出在你的js代码上,第二个问题,如果你是点了图标按住图标,然后拖动鼠标,然后松开鼠标按键,是会打开新页面并显示该图片的,如果你不是点了图标按住图标,拖动后松开按键的话,那也可能是的js的事件有问题了,第一个问题,你要贴出相关代码才能确定代码哪里有问题,第二个问题需要你自己确定是哪种操作,才可以确定问题出在哪
查看一下事件的时候有没判断阻挡拖动事件的发生
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!