图片预览
安装
引入
main.js:
1 2 3 4
| import Viewer from "v-viewer"; import 'viewerjs/dist/viewer.css';
Vue.use(Viewer)
|
使用
使用时只需在父标签中加上 v-viewer
属性,它会自动作用于子 img 标签。
1 2 3
| <div v-viewer> <img src="" alt=""/> </div>
|
点击图片时就会弹出预览的界面。
MarkDown 的编辑与转换
markdown 编辑器
安装
1
| npm install mavon-editor
|
引入
main.js:
1 2 3 4
| import mavonEditor from "mavon-editor"; import 'mavon-editor/dist/css/index.css'
Vue.use(mavonEditor)
|
使用
1
| <mavon-editor placeholder="请输入文章" v-model="content"></mavon-editor>
|
写的内容都保存在了 content 中。
markdown 转 html
安装
引入
在需要使用的组件中引入:
1
| import {parse} from 'marked'
|
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <mavon-editor placeholder="请输入文章" v-model="content"/>
<div v-html="article"></div> <button @click="md_to_h5"> 点击转换 </button>
<script> import {parse} from 'marked' data() { return { blog: '', content: '' } }, methods: { md_to_h5() { this.blog = parse(this.content); } } </script>
|
渲染出来的是默认的 markdown 样式,非常简单,可以去网上下载 css 文件,然后在组件中导入即可。
如果想让代码有高亮,可以引入 highlight.js:
1 2 3
| npm install highlight.js --save import hljs from 'highlight.js' import "highlight.js/styles/monokai-sublime.css";
|
然后在 marked.setOptions 中加上:
1 2 3 4 5 6 7 8 9 10 11
| <script> import {parse, setOPtions} from 'marked'
mounted() { setOptions({ highlight: function (code) { return hljs.highlightAuto(code).value; } }); } </script>
|
normalize.css
Normalize.css 是一个可以定制的 CSS 文件,它让不同的浏览器在渲染网页元素的时候形式更统一。
Normalize.css 只是一个很小的 css 文件,但它在磨人的 HTML 元素样式上提供了跨浏览器的高度一致性。相比于传统的 CSS reset,Normalize.css 是一种现代的、为 HTML5 准备的优质替代方案。总之,Normalize.css 是一种 CSS reset 的替代方案。
安装
1
| npm install --save normalize.css
|
使用
它只是一个初始化样式,在全局导入即可。
1
| import 'normalize.css/normalize.css'
|
vue 项目国际化
这里的国际化是指网站可以通过不同的语言来展示,比如可以切换中文或者英文。
vue 项目的国际化可以通过 vue-i18n 插件来实现。接下来我们来介绍一下它的使用方法。
安装
配置
在 src 目录下新建 lang 文件夹,然后在文件夹下新建 index.js,zh.js,en.js 三个 js 文件。
zh.js 和 en.js 用来存放需要进行转换的文字内容,若还有其他语言,增加相应文件即可。
index.js 用来创建 i18n 实例,然后将其导入 main.js 中。
zh.js
1 2 3 4 5 6
| export default { user: { username: '用户名', password: '密码' } }
|
en.js
1 2 3 4 5 6
| export default { user: { username: 'Username', password: 'Password' } }
|
index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import {createI18n} from 'vue-i18n' import zh from './zh' import en from './en'
const i18n = createI18n({ locale: 'zh', globalInjection: true, legacy: false, messages: { zh, en } })
export default i18n
|
main.js
1 2 3 4 5
| import i18n from "./lang";
... app.use(i18n); ...
|
使用
配置好之后就可以使用了:
1 2 3 4 5 6 7 8 9
| <p> {{ $t('user.username') }} </p>
<p> {{ t('user.username') }} </p>
|
如果想要点击切换语言,可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <button @click='changeLang'> 点击切换语言 </button>
<script> import {useI18n} from 'vue-i18n';
setup() { const i18n = useI18n(); function changeLang() { i18n.locale.value = i18n.locale.value === 'en' ? 'zh' : 'en'; }
return { changeLang } }
methods: { changeLang() { this.$i18n.locale = this.$i18n.locale === 'en' ? 'zh' : 'en'; } } </script>
|
更多关于 vue-i18n 的用法请看 https://kazupon.github.io/vue-i18n/zh/introduction.html。
vue 图片裁剪
官网:https://github.com/xyxiao001/vue-cropper。
安装
1
| npm install vue-cropper@next
|
引入
在需要用到的组件中:
1 2 3 4 5 6 7
| import 'vue-cropper/dist/index.css' import { VueCropper } from "vue-cropper";
export default { components:{ VueCropper }, ... }
|
使用
需在父容器上规定宽高。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| <div style="with:300px; height:300px"> <VueCropper ref="cropperRef" :img="option.img" :outputSize="option.outputSize" :outputType="option.outputType" :info="option.info" :canScale="option.canScale" :autoCrop="option.autoCrop" :autoCropWidth="option.autoCropWidth" :autoCropHeight="option.autoCropHeight" :fixed="option.fixed" :fixedNumber="option.fixedNumber" :full="option.full" :fixedBox="option.fixedBox" :canMove="option.canMove" :canMoveBox="option.canMoveBox" :original="option.original" :centerBox="option.centerBox" :height="option.height" :infoTrue="option.infoTrue" :maxImgSize="option.maxImgSize" :enlarge="option.enlarge" :mode="option.mode" /> </div>
<script> setup() { const const cropperRef = ref(); const option = reactive({ img: "", outputSize: 1, outputType: 'png', info: true, canScale: true, autoCrop: true, autoCropWidth: 230, autoCropHeight: 230, fixed: true, fixedNumber: [1, 1], full: false, fixedBox: false, canMove: false, canMoveBox: true, original: false, centerBox: false, height: true, infoTrue: false, maxImgSize: 3000, enlarge: 1, mode: "300px 300px" });
function getData() { cropperRef.value.getCropBlob(data => { console.log(data); }) }
return { cropperRef, option } } </script>
|
数字滚动
项目地址 https://github.com/inorganik/countUp.js。
安装
引入
1
| import { CountUp } from "countup.js";
|
使用
1
| const countUp = new CountUp(target, number, options)
|
CountUp 类支持传入三个参数,前两个是必须的。
target:目标 dom 对象;
number:最终要滚动到的数字;
options:配置参数,包括滚动的时间等。
CountUp 对象有以下几个方法:
1 2 3 4
| countUp.start() countUp.pauseResume() countUp.reset() countUp.update(1000)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <template> <span ref="numberRefs" v-for="_ in 10">{{ Math.round(Math.random()*1000) }}</span> </template>
<script setup lang="ts"> import { ref, onMounted } from "vue"; import { CountUp } from "countup.js";
const numberRefs = ref<HTMLSpanElement[]>([]); onMounted(() => { numberRefs.value.forEach(item => { new CountUp(item, Number(item.innerText), { duration: 2 }).start(); }); }); </script>
|
vue css-in-js 库
项目地址:https://styils.github.io/styils/。
安装
引入
1
| import { styled } from "@styils/vue";
|
使用
1 2 3 4 5 6 7 8 9 10 11 12
| const MessageBox = styled("div", { position: "absolute", zIndex: 1000, top: "50%", left: "50%", transform: "translate(-50%, -50%)", width: "300px", padding: "20px", backgroundColor: "#FFFFFF" });
return <MessageBox />
|