Vant简单H5 web app【小试牛刀】

article/2025/9/24 19:53:17

index.html

 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><!--谷歌浏览器(手机端)顶部颜色--><meta name="msapplication-TileColor" content="#4183fd"><meta name="theme-color" content="#4183fd"><!-- 如果不设置maximum-scale=1.0, user-scalable=0就会导致底部tabbar偶发性不响应transition缓动效果 --><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><!-- 浏览器顶部标题栏图标 --><link rel="shortcut icon" type="image/x-icon" href="./static/favicon.ico">
</head><body><div id="app"></div><!-- built files will be auto injected -->
</body></html>

src/js/main.js

 //【基础配置】----------------------------------------------------------------//引入Vue框架(设置为false以阻止vue在启动时生成生产提示)import Vue from 'vue';Vue.config.productionTip = false;//导入路由【安装方法】cnpm i vue-routerimport VueRouter from 'vue-router';Vue.use(VueRouter);import routes from './routes';const router = new VueRouter({scrollBehavior: (to, from, savedPosition) => {return { x: 0, y: to.meta.scrollTop || 0 }; //进入该页面时,用之前保存的滚动位置赋值 },routes});router.isDirectAccess = false; //是否直接访问(通常是通过超链接访问)router.goBack = () => {if (router.isDirectAccess) {router.push('/'); //如果直接访问,返回都直接跳转到根目录} else {router.isToRight = true; //页面从左往右滑动history.back(); //后退+刷新(为了某些页面重新登录的时候自动回到最顶端)//  history.go(-1); //后退}};router.beforeEach((to, from, next) => {router.isDirectAccess = from.name === null || from.path === to.path || from.path === "/"; //是否直接访问(譬如通过网址直接访问)from && (from.meta.scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop); //进入该页面时,记录上一个路由页面的滚动位置router.title = document.title = to.meta.title || ''; //路由发生变化修改页面title//判断跳转到一级页面if (to && to.meta && to.meta.tabbarIndex !== null && to.meta.tabbarIndex !== undefined) {if (from && from.meta && from.meta.tabbarIndex !== null && from.meta.tabbarIndex !== undefined) { //在一级页面之间切换router.isFade = true; //淡入淡出//router.isToRight = to.meta.tabbarIndex < from.meta.tabbarIndex;//判断在一级页面的时候,点击底部菜单左右移动方向,这里的tabbarIndex是在meta里定义的索引,用于判断菜单顺序} else { //从内页 → 一级页面router.isToRight = true;}}if (router.isFade) {router.transitionName = 'fade'} else {router.transitionName = router.isToRight ?"slide-right" :"slide-left"; //朝右滑动→、←朝左滑动}router.isFade = false; //重置淡入淡出router.isToRight = false; //重置朝左的方向next();});//【第三方插件】----------------------------------------------------------------//引入es6-promise【安装方法】cnpm i es6-promise --save-devimport promise from 'es6-promise'; //使用axios对安卓或者ios低版本兼容性处理promise.polyfill(); //注意需要在aixo之前注册//引入jquery【安装方法】cnpm i jquery --save-devimport $ from 'jquery';Vue.prototype.$ = $;//引入Axios【安装方法】cnpm i axios -S//建议暂时不要大面积使用Axios,我严重怀疑手机端它的兼容性问题!!!/*  import axios from 'axios';Vue.prototype.$axios = axios; *///引入Vant【安装方法】cnpm i vant -Simport Vant from 'vant';import 'vant/lib/index.css';import 'vant/lib/icon/local.css'; //解决离线无网络环境中使用icon不显示的问题Vue.use(Vant);//  引入Vant 图片懒加载模块import { Lazyload } from 'vant';Vue.use(Lazyload);//引入Echarts【安装方法】cnpm i echarts -Simport echarts from 'echarts';Vue.prototype.$echarts = echarts;//【公共方法】----------------------------------------------------------------import sg from "./sg";Vue.prototype.$g = sg;import sd from './sd';Vue.prototype.$d = sd;//【公共变量】----------------------------------------------------------------import global from "./global";Vue.prototype.$global = global;//【初始化加载】----------------------------------------------------------------import App from '../vue/App';new Vue({ el: '#app', render: h => h(App), router });

src/vue/App.vue

<template><div id="sg-app" :class="tabbars.includes($route.path)?'sg-home':'sg-inner'"><!-- 内页 --><transition :name="$router.transitionName"><router-view class="sg-router"></router-view></transition><van-tabbar v-model="active" active-color="#4183fd" inactive-color="#666"><van-tabbar-item icon="wap-home-o" to="/home">首页</van-tabbar-item><van-tabbar-item icon="medal-o" to="/by">毕业</van-tabbar-item><van-tabbar-item icon="records" to="/jy">就业</van-tabbar-item><van-tabbar-item icon="contact" to="/wd" info="8">我的</van-tabbar-item></van-tabbar></div>
</template>
<script>
export default {data() {return {active: 0,tabbars: []};},watch: {$route(to, from) {this.active = this.tabbars.indexOf(this.$route.path); //根据路由判断高亮显示的底部菜单}},created() {// 从全局路由配置里面提出底部一级菜单的路由var arr = this.$router.options.routes;for (var i = 0, len = arr.length; i < len; i++) {var a = arr[i];a.meta &&a.meta.index !== null &&a.meta.index !== undefined &&this.tabbars.push(a.path);}}
};
</script>
<style lang='scss' scoped>
@import "~@/css/common";
@mixin transformXY($x: 0, $y: 0) {-webkit-transform: translate($x, $y);transform: translate($x, $y);
}
#sg-app,
.sg-router {position: absolute;margin: auto;top: 0;left: 0;right: 0;bottom: 0;
}
.sg-router,
.van-tabbar {transition: 0.2s ease-out;-moz-transition: 0.2s ease-out;-webkit-transition: 0.2s ease-out;-o-transition: 0.2s ease-out;-khtml-transition: 0.2s ease-out;
}
.van-tabbar:after {border: none;box-shadow: 0 -20px 40px rgba(0, 0, 0, 0.05);
}
//在首页(底部有tabBar)的时候
.sg-router {background: #f2f2f2; //内页背景色浅灰
}
.sg-home {.sg-router {background: white; //首页背景色白色}.van-tabbar {@include transformXY(); //显示底部菜单}// 在首页的时候切换效果变成 淡入淡出 透明度.fade {&-enter,&-leave-active {opacity: 0;}}
}
//在内页的时候
.sg-inner {.van-tabbar {@include transformXY(0, 100%); //隐藏底部菜单}
}
.slide-left {&-enter {@include transformXY(100%, 0); //←朝左移入时的起始位置}&-leave-active {@include transformXY(-30%, 0); //←朝左移出时的结束位置}
}
.slide-right {&-enter {@include transformXY(-100%, 0); //朝右→移入时的起始位置}&-leave-active {@include transformXY(30%, 0); //朝右→移出时的结束位置}
}// 自定义全局控件样式----------------------------------------------------------------
// 顶部navbar蓝色背景+白色文字
>>> .van-nav-bar {background-color: #4586fe;.van-icon,.van-nav-bar__title {color: white;}
}
// 标签默认浅灰色背景
>>> .van-tag--default {background: #f4f5f7;color: #999;
}
// 定义卡片的按下样式
>>> .van-card {@extend %transition;&:active {background: #e8ecf2 !important;}
}
// 定义swipe下面的轮播点点
>>> .van-swipe__indicators {.van-swipe__indicator {background: #b2b2b2;&--active {background: #7f7f7f;width: 12px;border-radius: 6px;}}
}
>>> [class*="van-hairline"]::after {border: none;
}
</style>

src/js/routes.js

export default [{path: "/",redirect: "/home",},{path: "/home",meta: { title: '空中招聘', index: 0 },component: () =>import ('../vue/page/home'),},{path: "/xxtz",meta: { title: '消息通知' },component: () =>import ('../vue/page/home/xxtz'),},{path: "/sp",meta: { title: '视频面试' },component: () =>import ('../vue/page/home/xxtz/sp'),},{path: "/detail",meta: { title: '消息' },component: () =>import ('../vue/page/home/xxtz/detail'),},{path: "/tzgg",meta: { title: '通知公告' },component: () =>import ('../vue/page/home/tzgg'),},{path: "/xjh",meta: { title: '宣讲会' },component: () =>import ('../vue/page/home/xjh'),},{path: "/by",meta: { title: '毕业', index: 1 },component: () =>import ('../vue/page/by'),},{path: "/jy",meta: { title: '就业', index: 2 },component: () =>import ('../vue/page/jy'),},{path: "/wd",meta: { title: '我的', index: 3 },component: () =>import ('../vue/page/wd'),},{path: "/search/*",meta: { title: '搜索结果' },component: () =>import ('../vue/page/search'),}, {path: "*",meta: { title: '没有找到您想要的页面' },component: () =>import ('../vue/page/notFound')} //404页面,一定要写在最后
];

src/vue/page/home.vue、src/vue/page/home/tzgg.vue和src/vue/page/home/xjh.vue

<template><div :class="$route.path.replace(/\//g, '')"><van-sticky><van-nav-bar:title="$router.title"left-textright-textleft-arrow@click-left="$router.goBack"/></van-sticky><br /><br /><br /><br /><h1>{{$router.title}}</h1><van-button type="warning" to="/home">回首页</van-button><van-button type="primary" to="/tzgg">通知公告</van-button><van-button type="info" to="/xjh">宣讲会</van-button></div>
</template>


http://chatgpt.dhexx.cn/article/5eXYGxvv.shtml

相关文章

推荐几个H5、app制作开发工具

我们已经进入移动互联网时代&#xff0c;而app是移动互联网的载体。传统app开发面临成本高、周期长等问题&#xff0c;因此各类快速生成app的工具层出不穷。企业拥有了app才能实现互联网营销和互联网推广。中国有近7000万传统中小型企业&#xff0c;app会帮助这些企业实现互联网…

直接复制php代码制作app,一套免费无代码在线制作APP工具,将APP打包带走

线上营销的火爆离不开人们对APP的依赖&#xff0c;许多小商户已经从很早的时候就开始萌芽出制作APP来为实体店增加生意的想法&#xff0c;然后开发APP对中型企业都是一件成本极高的事情&#xff0c;即便小商户请外包团队需求降到最低&#xff0c;也会产生十几万的费用&#xff…

如何快速成为APP制作、H5制作高手?

App、H5无疑是移动互联网时代的宠儿&#xff0c;无数社交、商业、宣传都在App、H5上实现。掌握App、H5制作技能&#xff0c;无论工作、学习&#xff0c;更胜人一筹。 那么&#xff0c;什么是App呢&#xff1f; App(application的缩写)&#xff0c;即安装在手机上的软件。早期的…

uni-app跨端开发实现APP与H5之间的通讯和交互

最近在研究uni-app跨端开发APP和H5的通讯和交互&#xff0c;比如H5调用APP的方法&#xff0c;APP往H5里面传参&#xff0c;H5往app外面传参。话不多说&#xff0c;上代码&#xff01; html文件放本地的话必须放在项目根目录下的static文件夹 H5调用APP的方法 <!DOCTYPE ht…

利用H5+实现APP在线更新

1 在APP首页添加以下js代码 // 获取本地应用资源版本号 plus.runtime.getProperty(plus.runtime.appid,function(inf){wgtVer inf.version; // mui.toast("当前应用版本&#xff1a;"wgtVer);// 检测更新checkUpdate(); });// 检测更新 var checkUrl "能够返…

uniapp常用打包记录【h5、app、wx小程序】

h5打包 打包前配置 开始打包 打包成功 h5打包之后&#xff0c;如果用的unicloud开发&#xff0c;可以直接上传到“前端网页托管”&#xff0c;然后系统会有个默认域名&#xff0c;我们就可以实现公网访问了 h5的调试工具“vConsole” 参考&#xff1a; (160条消息) vue3 移动端…

H5加壳APP发布Android、IOS应用(证书响应文件制作)

主要步骤&#xff1a; 1.申请一个苹果账号 2.申请ios测试证书&#xff08;p12&#xff09; 3.申请ios描述文件&#xff08;mobileprovision&#xff09; 4.打包ipa 5.安装ipa 一、申请苹果账号 也可以用我注册好的苹果账号体验下&#xff0c;新注册个也简单&#xff0c;…

H5页面的部分IOS兼容处理

IOS兼容处理 环境&#xff1a;uni-app开发H5项目&#xff0c;H5项目链接webview嵌入app中 popup弹窗显示层级问题 问题&#xff1a;遮罩层遮挡位置不正确有白边&#xff0c;提交按钮应该在最底部却显示在popup上面 解决&#xff1a;将popup组件放到外层组件中&#xff0c;避免…

html app启动页制作,【示例】App引导页的制作

注意:本文为5+App的引导页制作方法,uni-app另行制作,推荐使用nvue制作,也可以参考插件市场已经封装的插件https://ext.dcloud.net.cn/plugin?id=192 启动页和引导页 首先澄清一下“启动界面”(splash)和“引导页”(guide)的概念,因为许多刚接触App开发的朋友会搞不清楚这…

H5+app -- 自动更新

一、最近做了一个app自动更新功能&#xff0c;用的基本都是网上找得到的。 1、h5 规范 &#xff1a; http://www.html5plus.org/doc/zh_cn/maps.html 2、环形进度条插件&#xff1a;http://www.jq22.com/jquery-info4495&#xff08;不知道什么原因&#xff0c;下载的时候&…

html5页面和app的区别,H5页面与APP区别何在

APP相信大家都非常熟悉&#xff0c;就是手机里经常安装的软件程序&#xff0c;它都需要经过下载安装的步骤才能打开产品进行操作。不过H5页面和APP却有比较大的区别&#xff0c;它不需要经过下载安装&#xff0c;直接能够在浏览器和微信等社交平台中打开操作。 APP的制作一般都…

uni-app消息推送功能实现

1&#xff0c;首先可以简单的看一下HTML5 API文档了解一下对应的方法 HTML5API&#xff1a;https://www.html5plus.org/doc/zh_cn/push.html#plus.push.MessageOptions 2&#xff0c;先在manifest.json勾选一下Push推送 3&#xff0c; 需要配置一下并传给后端 4&#xff0c;可…

H5+app 安卓原生插件开发

目录 1、参考文档 2、离线打包操作步骤 1、下载SDK 2.打开android studio导入项目 3.修改相关参数 1.修改AndroidManifest.xml文件 2.修改dcloud_control.xml文件 3.修改strings.xml 4.修改build.gradle 4.运行 3原生拓展 1.java原生代码编写 2.配置文件 1.修改dcl…

html5怎么制作app页面,玩转HTML5移动APP页面(动效篇)

作为一名前端&#xff0c;在拿到设计稿时你有两种选择&#xff1a; 加上高级大气上档次狂拽炫酷屌炸天的动画让页面动起来 作为一个有志向的前端&#xff0c;当然是选2啦&#xff01;可是需求时间又很短很短&#xff0c;怎么办呢&#xff1f; 这次就来谈谈一些动画设计的小技巧…

h5+hbuilder 制作手机app

Hbuilderx 下载地址 https://www.dcloud.io/hbuilderx.html 1.依次点击左上角 文件→ 新建→ 项目&#xff0c;会出现下面的界面。 2. index.html &#xff08;当然&#xff0c;引入的jq.js需要放到项目中&#xff09; <!DOCTYPE html> <html> <head><me…

Verilog带参数的`define用法

宏除了可以进行简单的文本替换,还可以像函数和任务一样传递指定多个参数分别对文本进行对应的替换. 示例1&#xff1a; define Disp(pa,pb,pc) \initial \begin \#1200; \$display("%d \n",(papbpc)); \$display(" data_ pa data_ pb data_ pc %d",(…

C语言中define的用法

define顾名思义&#xff0c;就是下定义&#xff0c;那么在C中它也发挥着下定义的作用。 1.提前定义变量 #include<stdio.h> #define N 100 int main() {int a10;printf("%d",Na);return 0; } 这个过程中N是100。 这个意思是提前定义N100&#xff0c;且这个…

C语言define高级用法大全

今天在看代码时&#xff0c;突然发现很多define的用法看不懂&#xff0c;故在此总结一下&#xff0c;顺便吐槽一下&#xff0c;C语言的宏复杂起来真的很难看懂。 不信的去看下这个的源码&#xff1a;【C语言开源库】lw_oopc&#xff1a;轻量级的C语言面向对象编程框架 一、宏…

Oracle基础之define用法简介教程

继上一篇博客Oracle绑定变量学习笔记&#xff0c;再写一篇define变量的简单教程 文章目录 1、define常量用法2、&和&&符号用法 1、define常量用法 注意&#xff1a;define常被误解为定义变量&#xff0c;其实不然&#xff0c;define定义的是字符常量&#xff0c;d…

#define的使用

目录 前言 1. #define定义标识符 2. #define定义宏 3. #define 替换规则 4. 宏和函数对比 前言 在很多C程序中&#xff0c;我们会在一个源文件的开头看到 #define 的字眼&#xff0c;和define的英文解释相同——可以理解为给xxx下定义&#xff0c;这里可以是标识符甚至是…