<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<script type="module" src="./main.js"></script>
</head>
<body>
<div id="app"></div>
</body>
</html>
index.html
global.css
main.js
App.vue
HelloBicool.vue
package.json
现在支持上传本地图片了!
index.html
global.css
body {
background-color: #fefefe;
}
编辑器加载中
main.js
import { createApp } from 'vue'
import './global.css'
import App from './App.vue'
createApp(App).mount('#app')
console.log(["Hello 笔.COOL 控制台"])
编辑器加载中
App.vue
<script setup>
import HelloBicool from './HelloBicool.vue'
import { ref } from "vue"
</script>
<template>
<div class="container">
<HelloBicool :title="title" :descr="descr" />
</div>
</template>
<style lang="scss" scoped>
$bg: #f0f2f5;
.container {
background: $bg;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
}
.logo {
height: 40px;
width: 40px;
margin-top: 20px;
}
</style>
编辑器加载中
HelloBicool.vue
<template>
<div class="container">
<!-- 触发按钮 -->
<div
class="trigger-div"
@click="toggleVisibility"
>
点击显示/隐藏内容
</div>
<!-- 内容区块(带过渡动画) -->
<transition name="fade">
<div
v-show="isVisible"
class="content-block"
ref="contentBlock"
>
这里是隐藏的内容<br>
可以放置任何HTML元素<br>
文本、图片、表单等...
</div>
</transition>
</div>
</template>
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'
const isVisible = ref(false)
const contentBlock = ref(null)
// 切换显示状态
const toggleVisibility = () => {
console.log('设备列表', isVisible.value);
isVisible.value = !isVisible.value
console.log('设备列表', isVisible.value);
}
// 点击外部区域关闭
const handleClickOutside = (event) => {
if (!contentBlock.value?.contains(event.target)) {
isVisible.value = false
}
}
// 生命周期钩子
// onMounted(() => {
// document.addEventListener('click', handleClickOutside)
// })
// onBeforeUnmount(() => {
// document.removeEventListener('click', handleClickOutside)
// })
</script>
<style scoped>
.container {
margin: 20px;
}
.trigger-div {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
cursor: pointer;
width: 200px;
text-align: center;
transition: background-color 0.3s;
}
.trigger-div:hover {
background-color: #45a049;
}
.content-block {
padding: 20px;
background-color: #f0f0f0;
margin-top: 10px;
border: 1px solid #ccc;
width: 200px;
}
/* 过渡动画 */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s, transform 0.3s;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
transform: translateY(-10px);
}
</style>
编辑器加载中
package.json
注意:新添加的依赖包首次加载可能会报错,稍后再次刷新即可
{
"dependencies": {
"vue": "3.5.13"
}
}
编辑器加载中
预览页面