完善画笔功能

This commit is contained in:
pipipi-pikachu 2021-01-13 20:44:17 +08:00
parent 1b440ea27b
commit cf6a94ea02
2 changed files with 51 additions and 4 deletions

View File

@ -3,5 +3,5 @@
import { createFromIconfontCN } from '@ant-design/icons-vue' import { createFromIconfontCN } from '@ant-design/icons-vue'
export default createFromIconfontCN({ export default createFromIconfontCN({
scriptUrl: '//at.alicdn.com/t/font_2317509_nn4bn0af7a.js', scriptUrl: '//at.alicdn.com/t/font_2317509_skpetzgttwg.js',
}) as any }) as any

View File

@ -3,14 +3,34 @@
<canvas class="canvas" ref="canvasRef" <canvas class="canvas" ref="canvasRef"
@mousedown="$event => handleMousedown($event)" @mousedown="$event => handleMousedown($event)"
@mousemove="$event => handleMousemove($event)" @mousemove="$event => handleMousemove($event)"
@mouseup="handleMouseup" @mouseup="handleMouseup()"
@mouseout="handleMouseup" @mouseleave="handleMouseup(); mouseInCanvas = false"
@mouseenter="mouseInCanvas = true"
></canvas> ></canvas>
<div
class="pen"
:style="{
left: mouse.x - penSize / 2 + 'px',
top: mouse.y - 50 + penSize / 2 + 'px',
color: color,
}"
v-if="mouseInCanvas && model === 'pen'"
><IconFont class="icon" :style="{ fontSize: '50px' }" type="icon-pen" /></div>
<div
class="eraser"
:style="{
left: mouse.x - rubberSize / 2 + 'px',
top: mouse.y - rubberSize / 2 + 'px',
}"
v-if="mouseInCanvas && model === 'eraser'"
><IconFont class="icon" :style="{ fontSize: rubberSize + 'px' }" type="icon-eraser" /></div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, onMounted, PropType, ref } from 'vue' import { defineComponent, onMounted, PropType, reactive, ref } from 'vue'
const penSize = 6 const penSize = 6
const rubberSize = 80 const rubberSize = 80
@ -39,6 +59,12 @@ export default defineComponent({
let lastTime = 0 let lastTime = 0
let lastLineWidth = -1 let lastLineWidth = -1
const mouse = reactive({
x: 0,
y: 0,
})
const mouseInCanvas = ref(false)
const initCanvas = () => { const initCanvas = () => {
if(!canvasRef.value || !writingBoardRef.value) return if(!canvasRef.value || !writingBoardRef.value) return
@ -156,7 +182,14 @@ export default defineComponent({
startDraw(e.offsetX, e.offsetY) startDraw(e.offsetX, e.offsetY)
} }
const updateMousePosition = (e: MouseEvent) => {
mouse.x = e.pageX
mouse.y = e.pageY
}
const handleMousemove = (e: MouseEvent) => { const handleMousemove = (e: MouseEvent) => {
updateMousePosition(e)
if(!isMouseDown) return if(!isMouseDown) return
startMove(e.offsetX, e.offsetY) startMove(e.offsetX, e.offsetY)
} }
@ -175,6 +208,10 @@ export default defineComponent({
onMounted(initCanvas) onMounted(initCanvas)
return { return {
mouse,
mouseInCanvas,
penSize,
rubberSize,
writingBoardRef, writingBoardRef,
canvasRef, canvasRef,
handleMousedown, handleMousedown,
@ -193,6 +230,16 @@ export default defineComponent({
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
z-index: 8;
cursor: none;
}
.eraser, .pen {
pointer-events: none;
position: fixed;
z-index: 9; z-index: 9;
.icon {
filter: drop-shadow(2px 2px 2px #999);
}
} }
</style> </style>