pc 移动端 双端切换
实现一个项目匹配多个端,使用vue.config自带的page 实现多个页面切换。官网介绍:https://cli.vuejs.org/zh/config/#pages

在创建的vue项目中找到 vue.config.js中 添加page
没有就在根目录下创建vue.config.js

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
//多页面配置
pages: {
// 多个页面
mobile: {
// 模板来源
template: 'public/mobile.html',
// page 的入口
entry: 'src/mobile.main.ts',
// 在 dist/index.html 的输出
filename: 'mobile.html',
// 页面标题
title: '移动适配',
},
index: {
template: 'public/index.html',
entry: 'src/main.ts',
filename: 'index.html',
title: 'pc适配',
}
},
})
vue.config.js
分别在 public, router ,views ,src下添加修改文件

public 中复制一个html 修改名字为 mobile(可以更具需求自己修改)。
router 与 view 中创建2套路由文件,分别对应pc 与 mobile
找到src 文件下的 App.vue 与 main.ts 复制一套并改名 为 mobileApp.vue 与 mobile.main.ts
router 多端路由配置

index.ts 代码
pc与mobile 下的index.ts 内容都一样,只有component 对应的页面地址 更具不同的端 ,对应不同的地址。
注:pc 与 mobile 内容,唯一要注意的是页面地址 分别对应不同的路径

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
const routes: Array<RouteRecordRaw> = [
{
path: "/",
name: "home",
//pc 或mobile 路径
component: () => import('@/views/PC/HomeView/HomeView.vue'),
meta: {
title: "首页",
//是否需要登录
requireAuth: false
}
}
]
const router = createRouter({
history: createWebHashHistory(process.env.BASE_URL),
//整合路由
routes: routes,
})
/*
前置 路由守卫
*/
/* eslint-disable */
router.beforeEach((to, from, next) => {
/* -----通过本地缓存进行判断,获取指定key本地存储的值进行判断----- */
if (to.meta.requireAuth) {
// 获取指定key本地存储的值
const token = localStorage.getItem('Authorization')
if (token === null || token === '') {
//登录弹窗
console.log("去登录")
} else {
next()
}
} else {
next()
}
})
/* eslint-disable no-new */
/*
后置 路由守卫
*/
router.afterEach((to: any) => {
// console.log("后置 路由守卫", to, from)
//更改每个页面的标题
document.title = to.meta.title;
})
export default router
router
Views 文件配置
在views 文件下分别创建 PC 与 Moblie 文件,对应为 pc端与移动端的页面地址。
复制一套app.vue 与main.ts ,修改复制的名字为 mobileApp.vue 与 mobile.main.ts
app.vue 与 mobileApp.vue

<template>
<router-view />
</template> <style lang="scss">
</style>
app.vue
main.ts 与 mobile.main.ts

import { createApp } from 'vue'
import App from './App.vue'
// main 导入 pc 端路由
import router from './router/pc/index'
// mobile.main 导入 mobile 端路由
// import router from './router/mobile/index'
import store from './store'
const app = createApp(App)
// 浏览器视口小于900px时,使用mobile路由
// 浏览器视口大于900px时,使用pc路由
import '@/utils/convert/autoSwitch'
import '@/utils/convert/rem'
app.use(store).use(router).mount('#app')
main.ts
创建utils文件,在创建convert 文件

在convert文件内部创建:autoSwitch.ts ,functions.ts ,rem.ts
autoSwitch 根据页面大小, 切换显示的端口

import { debounce } from './functions'
window.addEventListener('resize', debounce(() => {
if (document.documentElement.clientWidth < 900) {
if (window.location.href === '/mobile.html#/') return
window.location.href = './mobile.html#/'
} else {
if (window.location.href === '/index.html#/') return
window.location.href = './index.html#/'
}
}, 100))
autoSwitch.ts
rem 设置默认字体 等元素

import { debounce } from './functions'
function setRem() {
// 320 默认大小16px; 320px = 20rem ;每个元素px基础上/16
const htmlWidth = document.documentElement.clientWidth || document.body.clientWidth
// 得到html的Dom元素
const htmlDom = document.getElementsByTagName('html')[0]
// 设置根元素字体大小
const clientWidth = document.documentElement.clientWidth
// 1920设计稿一套样式,750设计稿一套样式
htmlDom.style.fontSize = clientWidth < 900 ? htmlWidth / 46.875 + 'px' : htmlWidth / 120 + 'px'
}
// 初始化
setRem()
window.addEventListener('resize', debounce(setRem, 100))
rem.ts
functions 防抖与节流函数
注:注释的为js版本使用的 ,没注释的为ts版本

// 防抖函数
type CallbackFn = (item?: any) => void
export function debounce(fn: CallbackFn, delay: number) {
let timer: number | null = null;
return (...args: any[]) => {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn(...args);
}, delay);
}
} // 节流函数
export function throttle(fn: CallbackFn, delay: number) {
let timer: number | null = null;
return (...args: any[]) => {
if (timer) {
return;
}
timer = setTimeout(() => {
fn(...args);
timer = null
}, delay);
}
} /*
js 原始版本
// 防抖函数
export function debounce(fn, delay) {
let timer = null
return function () {
const _this = this
const args = arguments
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(function () {
fn.apply(_this, args)
}, delay)
}
} // 节流函数
export function throttle(fn, delay) {
let timer = null
return function () {
const _this = this
const args = arguments
if (timer) {
return
}
timer = setTimeout(function () {
fn.apply(_this, args)
timer = null
}, delay)
}
}
*/
functions.ts
运行路由展示
项目地址:https://github.com/jielov/doubleEnd-switch


pc 移动端 双端切换的更多相关文章
- 在thinkPHP3.2.3框架下实现手机和PC端浏览器的切换
查看thinkphp版本号方法 打开文件“根目录\ThinkPHP\ThinkPHP.php”下的文件ThinkPHP.php,在22--23行可以看到版本信息THINK_VERSION,如下图: 说 ...
- 10天学会phpWeChat——第七天:创建一个自适应PC网站+H5移动端的模块
本教程基于phpWeChat核心框架1.1.0+版本.下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 通过前面六讲的系 ...
- 在PC上测试移动端网站和模拟手机浏览器的5大方法
在PC上测试移动端网站和模拟手机浏览器的5大方法 来源:互联网 作者:佚名 时间:03-19 10:14:54 [大 中 小] 最近公司要开发网站的移动版,让我准备准备知 ...
- bootstrap导航栏PC端移动端之不同样式
在此之前,我先说我之所以要改变网站PC移动双端不同样式的原因. 首先我的网站用到了bootstrap响应式布局,这是我网站的PC端导航栏: 这是我网站的移动端导航栏,看着就难受: 我用谷歌浏览器F12 ...
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- lintcode 滑动窗口的最大值(双端队列)
题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 ...
- HTML5移动端图片左右切换动画
插件描述:HTML5移动端图片左右切换动画 小海今天要给大家分享一款很不错的图片左右切换焦点图动画,并且支持移动端触摸滑动.功能上,这款HTML5图片播放器支持鼠标滑动.手机端触摸滑动以及自动播放.外 ...
- Java数据结构——用双端链表实现队列
//================================================= // File Name : LinkQueue_demo //---------------- ...
- STL---deque(双端队列)
Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
随机推荐
- 2022-01-09:整数转换英文表示。将非负整数 num 转换为其对应的英文表示。 示例 1: 输入:num = 123, 输出:“One Hundred Twenty Three“。 力扣273。
2022-01-09:整数转换英文表示.将非负整数 num 转换为其对应的英文表示. 示例 1: 输入:num = 123, 输出:"One Hundred Twenty Three&quo ...
- 2021-10-30:有效的字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位
2021-10-30:有效的字母异位词.给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词.注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位 ...
- Django 14天从小白到进阶- Day1 Django 初识
来自作者:金角大王 本节内容 Http原理介绍 自行开发一个Web框架 WSGI介绍 Django介绍 MVC/MTV Django安装 创建项目与APP 开发第一个页面 为什么学Django? Go ...
- 回溯理论基础及leetcode例题
学习参考 回溯 与递归相辅相成;回溯是递归的副产品,只要有递归就会有回溯. 回溯函数也就是递归函数,指的都是一个函数. 回溯搜索法 纯暴力搜索 解决的问题 组合问题:N个数里面按一定规则找出k个数的集 ...
- 一天吃透Spring面试八股文
内容摘自我的学习网站:topjavaer.cn Spring是一个轻量级的开源开发框架,主要用于管理 Java 应用程序中的组件和对象,并提供各种服务,如事务管理.安全控制.面向切面编程和远程访问等. ...
- 翻译:REST 和 gRPC 详细比较
译者注:在微服务架构设计,构建API和服务间通信技术选型时,对 REST 和 gRPC 的理解和应用还存在知识盲区,近期看到国外的这篇文章:A detailed comparison of REST ...
- 在Transformers 中使用约束波束搜索引导文本生成
引言 本文假设读者已经熟悉文本生成领域波束搜索相关的背景知识,具体可参见博文 如何生成文本: 通过 Transformers 用不同的解码方法生成文本. 与普通的波束搜索不同,约束 波束搜索允许我们控 ...
- 效率神器,边看网页边问ChatGPT!神级ChatGPT插件(浏览器扩展)推荐!
如果在看一个网页时,有些词不认识.句子不知道含义,怎么办? 憨憨版:不认识就算了呗,还能咋滴 进阶版:复制到 Google/Baidu 里问一问: AI达人版:复制到 ChatGPT/Claude 里 ...
- 云上使用 Stable Diffusion ,模型数据如何共享和存储
随着人工智能技术的爆发,内容生成式人工智能(AIGC)成为了当下热门领域.除了 ChatGPT 之外,文本生成图像技术更令人惊艳. Stable Diffusion,是一款开源的深度学习模型.与 Mi ...
- 用R语言实现并行计算:基于R的数据处理和分析工具
目录 引言 随着数据量的爆炸式增长,数据处理和分析的需求也越来越大.传统的批处理计算已经无法满足高效的数据处理和分析需求,因此,并行计算成为了一个重要的技术方向.然而,R语言作为一种开源.可视化能力强 ...