首先看一下效果:
实现的思路:
- 先设置一个容器的,容器中放上10×10的小格子,同时监听容器的进入和离开方法。
- 每个小格子上设置鼠标进入的方法,同时传入当前的序号,计算出当前的行和列,改变背景颜色。
- 监听容器的是从那个位置进入,只有从左边和上边进入有效。
相关的核心代码:
- 判断鼠标移入元素的方向——上下左右,核心代码:
var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;
相关解释参考这篇文章:
https://www.cnblogs.com/liuyanxia/p/5666892.html
相关代码:
// 判断鼠标是否从左上进入
direct(e) {
const x = e.offsetX - 230 / 2; //鼠标进入的X坐标-盒子宽度的一半
const y = e.offsetY - 230 / 2; //鼠标进入的y坐标-盒子宽度的一半
const direction =
(Math.round((Math.atan2(y, x) * (180 / Math.PI) + 180) / 90) + 3) % 4;
if (direction === 0 || direction === 3) {
this.isLeftTop = true;
} else {
this.isLeftTop = false;
}
}
- 判断当前滑入到那个小窗格,改变背景颜色
// 获取鼠标进入方格的位置,进行背景渲染
getMousePlace(index) {
this.isOn = true;
if (!this.isLeftTop || this.isSelected) {
return;
}
const x = Math.floor(index % 10);
const y = Math.floor(index / 10);
const children = this.$refs.wallRow.children;
for (let i = 0; i < this.divList.length; i++) {
const childrenx = Math.floor(i % 10);
const childreny = Math.floor(i / 10);
if (childrenx < x + 1 && childreny < y + 1) {
children[i]