首页 > 其他分享 >h5移动端应用实现类似原生页面切换效果

h5移动端应用实现类似原生页面切换效果

时间:2023-04-01 09:35:36浏览次数:49  
标签:原生 动画 direction isIosJump DirectionType h5 router page 页面

1.原理

将vue-router中的跳转方法重写并监听,根据不同的跳转类型加载不同的过渡动画。

2.实现

创建router-helper.js文件

export const DirectionType = {
// 进入动画
In: 'in ',
// 退出动画
Out: 'out ',
/** 不应用动画,用于处理IOS侧滑冲突 */
None: ' '
}

// 路由动画
export const routeTransition = (router) => {
/** 默认认为是IOS的侧滑返回,通过监听router方法进行改变 */
let isIosJump = true
let direction = DirectionType.None

/** 处理路由跳转动画,push、replace、go(正值 | 0)应用In动画,其他情况应用Out动画 */ router.replace = inject( 'before ', router.replace, () => {
isIosJump = false
direction = DirectionType.In
})

router.push = inject( 'before ', router.push, () => {
isIosJump = false
direction = DirectionType.In
})

router.go = inject( 'before ', router.go, (delta) => {
isIosJump = false
if (delta >= 0) {
  direction = DirectionType.In
} else {
  direction = DirectionType.Out
}
})

router.back = inject( 'before ', router.back, () => {
isIosJump = false
direction = DirectionType.Out
})

router.beforeEach((to, from, next) => {
// 如果是IOS侧滑则不应用侧滑动效

if (isIosJump) {
  direction = DirectionType.None
}

to.meta.direction = direction

next()
})

router.afterEach(() => {
isIosJump = true
})
}

function inject(position, func, handler) {
return (...args) => {
if (position === 'before ' | | position === 'after ') handler === null | | handler === 0 ? 0 : handler(...args)
return func(...args)
}
}

在router.js中引入routeTransition方法

import { routeTransition } from './router-helper '
// 应用路由跳转动画
// 此处的router是通过createRouter 创建出来的路由实例
routeTransition(router)

创建计算路由切换方向的useDirection.js

import { computed } from 'vue '
import { useRoute } from 'vue-router '
import { DirectionType } from '@/router/router-helper '

export const useDirection = () => {
const route = useRoute()
const direction = computed(() => {
// 获取当前页面滑动动效方向,  "" 表示不应用动效,处理ios下动效冲突问题
if (route.meta.direction === DirectionType.None) return DirectionType.None
// 与动画名字保持一致
return 'page- ' + (route.meta.direction === DirectionType.In ? DirectionType.In : DirectionType.Out)
})
return direction
}

<template>
<router-view v-slot="{ Component }">
<transition :name="direction" :css="!!direction">
  <component :is="Component" />
</transition>
</router-view>
</template>
<script setup>
import { useDirection } from '@/hooks/useDirection '
const direction = useDirection()
</script>

过渡动画

.page-out-enter-active,
.page-out-leave-active,
.page-in-enter-active,
.page-in-leave-active {
will-change: transform;
transition: transform 0.25s ease-out;
height: 100%;
width: 100%;
top: 0;
left: 0;
position: fixed;
backface-visibility: hidden;
perspective: 1000;
background-color: #f4f4f4;
}

.page-out-enter-from {
transform: translateX(-30%);
}

.page-out-leave-active {
transform: translateX(100%);
z-index: 2;
}

.page-in-enter-from {
transform: translateX(100%);
}

.page-in-leave-active {
transform: translateX(-30%);
}

3.效果

作者:孟兵

标签:原生,动画,direction,isIosJump,DirectionType,h5,router,page,页面
From: https://www.cnblogs.com/DTCLOUD/p/17278073.html

相关文章

  • 登录页面
        ......
  • 电影票选座HTML页面
    以下是一个简单的电影票选座的HTML页面示例:<!DOCTYPEhtml><html><head><title>电影票选座</title><style>/*样式表*/.seat{background-color:green;color:white;padding:10px;......
  • nginx启动成功,页面还是无法访问?
    问题如下图: 1.检查Nginx配置文件:nginx-t2.每次修改配置文件都要重新加载、启动nginx-sreload#重新载入配置文件nginx-sreopen#重启Nginx3.查看nginx进程 4.查看防火墙状态(不同Linux版本防火墙不同,以CentOSLinuxrelease7.9为例)查看状态:systemctlstatusfi......
  • 有关wordpress文章页面出现404的问题
    有关wordpress文章页面出现404的问题修复的时候总结了一下原因:1.未开启apache的rewrite功能2..htaccess文件中的伪静态规则配置错误3.由于目录存在中文,编码问题导致解决方案:1.未开启apache的rewrite功能:使用命令sudoa2enmodrewrite开启mod_rewrite,然后修改配置文件......
  • 微信开发:个人页面
    微信开发:个人页面wxml:<!--用户列表选项--><scroll-viewclass="scbg"scroll-y='true'><viewclass="parent_catainer"><!--头部--><!--style="background-image:url('/images/persons/mind_hea......
  • uniapp与ios原生混合开发教程 - 开篇
    说明有读者反馈:学习uniappios插件开发不知道从哪些文章看起,没有一个清晰的学习路线本文就做一个解答。首先本系列的文章是作者精心排过序的,如果想要完整的学习uniappios原生插件开发技术的话,建议是按文章顺序浏览。当然您如果有相关的开发经验,且只对某一技术实现感兴趣......
  • 五分钟!获得轻量级的云原生应用控制平面
    作者:乔中沛云原生的不断成熟让大量基础设施层的能力可以被业务应用直接使用,然而广大的开发者们却苦于很高的上手门槛和学习成本,一直没有机会深入了解云原生生态的工具体系。今天我们将为你介绍一个好用的工具,它能够在离线环境帮你快速安装Kubernetes集群,低门槛的上手业务应用......
  • 混合式开发UI自动化 之原生和webview 切换
    正常进入小程序登录页面,操作写入用户名、密码,程序报错需切换页面至webview中,主要涉及context  driver.contexts输出打印 NATIVE_APP代表原生WEBVIEW代表小程序页面driver.switch_to.context(contexts[2])数字看需填写切换后即可进行元素操作 ......
  • 史上最简 冰橙GPT前端开源 单页面 免编译 chatGPT3 对话页
    下载地址:https://gitee.com/zyhd/bingChengGPT 预览效果 冰橙GPT前端开源单页面免编译chatGPT3对话页对接冰橙GPT的API免安装本地可直接运行index.html即可已经将所有需要JS及CSS都采用公有CDN使用说明项目只有单个文件:index.html在index.html可在文件里修改JS区......
  • PageOffice 在线编辑 office文件,回调父页面
    一、子页面调用父页面的方法varvalue=window.external.CallParentFunc("ParentFunName(Arguments);");//父页面的JS函数有返回值window.external.CallParentFunc("ParentFunName(Arguments);");//父页面的JS函数无返回值二、是否需要传递参数(子页面关闭窗口的同时刷新父页面......