当前位置: 首页 > news >正文

教育网站模板传统网站设计的缺点

教育网站模板,传统网站设计的缺点,WordPress添加作者信息小工具,网站制作如何#技术栈Vue3TypeScript# 相比大家没少见过这个的效果: 作为视觉效果是很不错的 同时实现也很简单,本质是封装一个Vue指令 1,创建指令文件 src / directives / vSlidenIn.ts import type { Directive } from vueconst vSlideIn: Directive …

#技术栈Vue3+TypeScript#

相比大家没少见过这个的效果:

作为视觉效果是很不错的 同时实现也很简单,本质是封装一个Vue指令

1,创建指令文件 src / directives / vSlidenIn.ts

import type { Directive } from 'vue'const vSlideIn: Directive = {mounted(element) {// 组件记载后会触发的逻辑}
}export default vSlideIn

2,Animation API 添加入场动画

        同学们可能会想到改变stye或者class类,这些都是偏麻烦的,入侵性太大的指令泛用性会很低。我们这里使用Animation API封装动画,保证复用性

const MOVE_DISTANCE = 8
const MOVE_DURATION = 1000......const vSlideIn: Directive = {mounted(element) {const animation = element.animate([{transform: `translateY(${MOVE_DISTANCE}rem)`,opacity: 0,},{transform: 'translateY(0)',opacity: 1,},], {duration: MOVE_DURATION,easing: 'ease'})animation.pause()}
}.......

        这样是实现了动画,但动画会在所有组件出现时执行---那该如何让每个元素被滑动到时执行呢?请问下面

3,Intersection Observer API 判断执行时机

        调用其中的IntersectionObserver去监听使用该指令的元素,通过内置返回的元素的isInterscting值判断元素是否与窗口重叠

......const ob = new IntersectionObserver(entries => {// entries是一起监听的所有元素,是数组for (const entry of entries) {if (entry.isIntersecting){const element = entry.target// 执行动画逻辑}}
})......const vSlideIn: Directive = {mounted(element) {const animation = element.animate([{transform: `translateY(${MOVE_DISTANCE}rem)`,opacity: 0,},{transform: 'translateY(0)',opacity: 1,},], {duration: MOVE_DURATION,easing: 'ease'})ob.observe(element) // 监听},unmounted(element) {ob.unobserve(element)  // 记得组件销毁后取消监听}
}

但是,如何让每个元素和执行的动画对上号呢?

4,New Map存放映射

        在元素初始化时 暂停后动画pause()   全局new一个WeakMap来存放元素及其对应的动画 在监听函数中调用map找到对应的animation进行执行

// 滑动入场指令
import type { Directive } from 'vue'const MOVE_DISTANCE = 8
const MOVE_DURATION = 1000
const animationMap = new WeakMap()const ob = new IntersectionObserver(entries => {// entries是一个重叠状态的一个数组for (const entry of entries) {if (entry.isIntersecting){const element = entry.targetconst animation = animationMap.get(element)if (animation) {animation.play()ob.unobserve(element)}}}
})const vSlideIn: Directive = {mounted(element) {const animation = element.animate([{transform: `translateY(${MOVE_DISTANCE}rem)`,opacity: 0,},{transform: 'translateY(0)',opacity: 1,},], {duration: MOVE_DURATION,easing: 'ease'})animation.pause()animationMap.set(element, animation)ob.observe(element)},unmounted(element) {ob.unobserve(element)}
}export default vSlideIn

5,组件的应用

开袋即食,引入后在元素内加入v-slide-in即可,Vue会自己编译的

<template><main class="space-y-10"><article v-for="i in 10" :key="i" class="w-100 h-50 bg-red-500 shadow-md text-center leading-50 mx-auto text-white text-2xl" v-slide-in><h1>测试{{ i }}</h1></article></main>
</template><script setup lang="ts">
import vSlideIn from '@/directives/vSlideIn'</script>

http://www.dtcms.com/a/434133.html

相关文章:

  • 江苏建设行政主管部门网站软件企业公司网站模板
  • 找别人做的网站问什么域名解析后还是上线不网站已运行时间代码
  • 连云港网站建设培训源创派网站建设
  • 怎么自己编程做网站科技部做财务决算的网站是什么
  • 注册网站域名主机搭建网站教程
  • seo网站快速排名软件美容网站设计
  • 免费的网站怎么做高端网站开发培训
  • 为什么别的电脑能打开的网站我的电脑打不开一个简单的html网页
  • 网站建设公司介绍ppt云南微网站建设的公司有哪些
  • 个人网站模板素材无锡做网站6
  • 肖港网站开发小说网站怎么做流量
  • 个人网站的制作实验报告网站联系我们页面设计
  • 网站后台界面商贸公司网站建设极致发烧
  • 新民电子网站建设哪家好我要注册邮箱
  • 高大上的自助建站网站wordpress页面展示插件
  • 极简风网站wordpress 大发
  • 网站后台账号网站跟wordpress连接
  • 网站数据搬家wordpress内容批量替换
  • 怎么仿制网站wordpress做网盘资源
  • 求个网站谢谢啦wordpress极简主题
  • 自己做的网站地址手机怎么打不开开通网站空间
  • 企业做网站公司排名口碑十大设计网站
  • 仙桃做网站asp做网站用什么写脚本
  • asp 网站运行网站建设南阳
  • 自贡网站建设公司智能制造
  • 建站交流自己的网站怎么做搜索引擎
  • 怎么查询网站的设计公司怎么看一个网站有没有做301
  • 建设银行公户网站服务商类型是什么意思
  • 余干县建设局网站学校seo推广培训班
  • 小型网站建设需要多少钱dedecms 资源类网站模板