page: 📄 填充+鼠标事件

This commit is contained in:
bunny 2024-07-11 14:06:49 +08:00
parent 05a4a63df7
commit efdd6c23c9
1 changed files with 126 additions and 3 deletions

View File

@ -1,7 +1,130 @@
<template> <template>
<div id="container"></div> <div id="container"></div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useWindowSize } from '@vueuse/core';
</script> import Konva from 'konva/lib';
import { onMounted } from 'vue';
const { width, height } = useWindowSize();
const initial = () => {
const stage = new Konva.Stage({
container: 'container',
width: width.value,
height: height.value,
});
const layer = new Konva.Layer({ draggable: true });
const images = new Image();
images.src = 'http://192.168.3.98:9000/bunny-bbs/avatar/2024/06-17/24a90c2ba57445e0a1b119fdcc457a37.jpg';
//
const colorPentagon = new Konva.RegularPolygon({
x: 80,
y: stage.height() / 2,
sides: 5,
radius: 70,
fill: '#f00',
stroke: '#000',
strokeWidth: 4,
dashEnabled: true,
});
//
const patternPentagon = new Konva.RegularPolygon({
x: 220,
y: stage.height() / 2,
sides: 5,
radius: 70,
fillPatternImage: images,
fillPatternOffset: { x: 55, y: 55 },
stroke: '#000',
strokeWidth: 4,
draggable: true,
});
// 线
const linearGradPentagon = new Konva.RegularPolygon({
x: 360,
y: stage.height() / 2,
sides: 5,
radius: 70,
fillLinearGradientStartPoint: { x: -50, y: 50 },
fillLinearGradientEndPoint: { x: 50, y: 50 },
fillLinearGradientColorStops: [0, 'red', 1, 'green'],
stroke: '#000',
strokeWidth: 4,
draggable: true,
});
const radialGradPentagon = new Konva.RegularPolygon({
x: 500,
y: stage.height() / 2,
sides: 5,
radius: 70,
fillRadialGradientStartPoint: { x: 0, y: 0 },
fillRadialGradientStartRadius: 0,
fillRadialGradientEndPoint: { x: 0, y: 0 },
fillRadialGradientColorStops: [0, 'red', 0.5, 'green', 1, 'blue'],
fillRadialGradientEndRadius: 70,
stroke: '#000',
strokeWidth: 4,
draggable: true,
});
/*
* bind listeners
*/
colorPentagon.on('mouseover touchstart', function () {
this.fill('yellow');
});
colorPentagon.on('mouseout touchend', function () {
this.fill('red');
});
/**
* 设置图片事件
*/
patternPentagon.on('mouseover touchstart', function () {
images.src = 'http://192.168.3.98:9000/bunny-bbs/avatar/2024/06-17/7e716b9313384c139686460b81f431ea.jpg';
this.fillPatternImage(images);
});
patternPentagon.on('mouseout touchend', function () {
images.src = 'http://192.168.3.98:9000/bunny-bbs/avatar/2024/06-17/24a90c2ba57445e0a1b119fdcc457a37.jpg';
this.fillPatternImage(images);
});
/**
* 线性渐变
*/
linearGradPentagon.on('mouseover touchstart', function () {
this.fillLinearGradientColorStops([0, 'yellow', 1, 'blue']);
});
linearGradPentagon.on('mouseout touchend', function () {
this.fillLinearGradientColorStops([0, 'red', 1, 'green']);
});
/**
* 中心渐变
*/
radialGradPentagon.on('mouseover touchstart', function () {
this.fillRadialGradientColorStops([0, 'red', 0.5, 'yellow', 1, 'green']);
});
radialGradPentagon.on('mouseout touchend', function () {
this.fillRadialGradientColorStops([0, 'red', 0.5, 'green', 1, 'blue']);
});
layer.add(radialGradPentagon);
layer.add(linearGradPentagon);
layer.add(patternPentagon);
layer.add(colorPentagon);
stage.add(layer);
};
onMounted(() => {
initial();
});
</script>