vue3制作全屏缩放功能以及引导页

本文介绍了如何在Vue项目中实现全屏缩放功能和创建引导页。首先,通过npm安装screenfull库并实现全屏切换。接着,讲解了driver.js的安装和使用,用于创建多步骤的引导页,包括设置步骤、元素定位和国际化支持。通过i18n整合,实现了语言切换时引导页内容的更新。
摘要由CSDN通过智能技术生成

一、全屏缩放功能

1.安装

npm i screenfull@5.1.0

2.使用

<template>
<div @click="handleFullScreen">
  <svg-icon
    :icon="screen ? 'exit-fullscreen' : 'fullscreen'"
  ></svg-icon>
</div>
</template>

<script lang="ts" setup>
import {ref} from "vue";
import screenfull from "screenfull";

const screen = ref(false)
const handleFullScreen = () => {
  screen.value=!screen.value
  if(screenfull.isEnabled) return screenfull.toggle()
}
</script>

二、引导页

1.安装

npm i driver.js

2.创建steps.ts文件

export const steps = [
  {
    element: '#guide',
    popover: {
      title: 'Title on Popover',
      description: 'Body of the popover',
      position: 'left'
    }
  },
  {
    element: '#hamburger',
    popover: {
      title: 'Breadcrumb',
      description: 'Indicate the current page location',
      position: 'right'
    }
  }
]

3.使用

<template>
  <div id="guide" @click.prevent.stop="handleGuide">
    <svg-icon icon="guide"></svg-icon>
  </div>
</template>

<script lang="ts" setup>
import Driver from 'driver.js'
import 'driver.js/dist/driver.min.css'
import {onMounted} from "vue";
import {steps} from "@/layout/Header/components/driver/steps";

let driver:any;
onMounted(()=>{
  driver=new Driver({
    opacity: 0.75,
    animate: false,  // 否则图标消失
    padding: 10,
    allowClose: true, //禁止点击外部关闭
    overlayClickNext: false,  //如果它在覆盖上移动到下一步,请单击
    doneBtnText: '完成', // 完成按钮标题
    closeBtnText: '关闭', // 关闭按钮标题
    stageBackground: '#fff', // 引导对话的背景色
    nextBtnText: '下一步', // 下一步按钮标题
    prevBtnText: '上一步', // 上一步按钮标题
  })
})
const handleGuide = ()=>{
  driver.defineSteps(steps)
  driver.start()
}

</script>

若使用i18n
steps.ts

export const steps =(i18n:any) => [
  {
    element: '#guide',
    popover: {
      title: i18n('driver.guideBtn'),
      description: '接下来让我来介绍一下如何使用叭~',
      position: 'left'
    }
  },
  {
    element: '#hamburger',
    popover: {
      title: i18n('driver.hamburgerBtn'),
      description: '对菜单进行伸缩控制',
      position: 'right'
    }
  },
  {
    element: '#fullScreen',
    popover: {
      title: i18n('driver.fullScreen'),
      description: '对屏幕缩放控制',
      position: 'left'
    }
  },
]

index.vue

<template>
<div id="guide" @click.prevent.stop="handleGuide">
  <svg-icon icon="guide"></svg-icon>
</div>
</template>

<script lang="ts" setup>
import Driver from 'driver.js'
import 'driver.js/dist/driver.min.css'
import {onMounted} from "vue";
import {steps} from "@/layout/Header/components/driver/steps";
import i18n from "@/i18n";
import {watchLang} from '@/i18n/language/index.ts'

const t = i18n.global.t
let driver:any;
onMounted(()=>{
  initDriver()
})
const initDriver = ()=>{
  driver=new Driver({
    opacity: 0.75,
    animate: false,  // 否则图标消失
    padding: 10,
    allowClose: true, //禁止点击外部关闭
    overlayClickNext: false,  //如果它在覆盖上移动到下一步,请单击
    doneBtnText: t('driver.doneBtnText'), // 完成按钮标题
    closeBtnText: t('driver.closeBtnText'), // 关闭按钮标题
    stageBackground: '#fff', // 引导对话的背景色
    nextBtnText: t('driver.nextBtnText'), // 下一步按钮标题
    prevBtnText: t('driver.prevBtnText'), // 上一步按钮标题
  })
}
watchLang(initDriver)

const handleGuide = ()=>{
  driver.defineSteps(steps(t))
  driver.start()
}

</script>

language.ts

import en from './en'
import zh from './zh'
import {watch} from "vue";
import store from "@/store";

//监听当前的语言
export const watchLang= (...cbs: object[])=>{
  watch(
    ()=>store.getters.lang,
    ()=>{
      cbs.forEach((cb:any)=>cb(store.getters.lang))
      console.log(store.getters.lang);
    },
    {deep:true,immediate:true})
}

export default {
  en,
  zh
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值