(0021) H5-Vuejs配合 mint-ui 开发移动端web

news/2024/5/15 2:55:20/文章来源:https://blog.csdn.net/shifang07/article/details/131515198

mint-ui

初衷

element-ui主打pcweb,导致移动端上UI适配问题突出,趟了很多坑。这次更加理智些,选择了饿了么团队的主打移动端的mint-ui,目前来说体验很好。

认识Mint-ui

首先在手机上体验其demo,扫描链接:
在这里插入图片描述
在这里插入图片描述

  • 使用时,参考指定demo代码。由于官方的文档稍微有点欠缺,但是结合demo代码,已经完全足够了

mint-ui/example/pages at master · ElemeFE/mint-ui · GitHub

  • demo内特性不够支持自己需求的时候,继续参考文档,因为文档中会把各种属性值列全。Mint UI 使用文档
npm i mint-ui -S

Mint UI 使用文档
mint-ui documentation

  • 实在支持不了,自定义。

记录开发过程中几个坑

  1. 移动端rem适配(含mint-ui的情况下)

这是在搭建框架的时候遇到的第一个问题,按照原先的经验,我先尝试使用了px2rem-loader来统一将px转换为rem,但是问题是,使用px2rem会将项目内所有css文件的px都转为rem,而mint-ui内的css是不能被转换的,因为其本身已经做了一些适配,但是并不基于rem的方式,所以如果强制将其内部的css文件做了转换,一般会导致所有其内部元素的尺寸变小。

所以目的应该是将自己写的样式内容做rem转换,所以使用了postcss,原因是postcss带有px2rem的插件。

贴下vue-loader.conf.js:

'use strict'
const utils = require('./utils')
const config = require('../config')
const precss = require('precss')
const pxtorem = require('postcss-px2rem')
const autoprefixer = require('autoprefixer')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction? config.build.productionSourceMap: config.dev.cssSourceMapmodule.exports = {loaders: utils.cssLoaders({sourceMap: sourceMapEnabled,extract: isProduction}),postcss:[precss(),autoprefixer({browsers: ['last 10 Chrome versions','last 5 Firefox versions','Safari >= 6','ie > 8']}),pxtorem({remUnit: 75 //设计尺寸的1/10})],cssSourceMap: sourceMapEnabled,cacheBusting: config.dev.cacheBusting,transformToRequire: {video: ['src', 'poster'],source: 'src',img: 'src',image: 'xlink:href'}
}

Main.js中动态设置root节点的fontsize,配合rem适配响应式:

// px2rem
window.onresize = setHtmlFontSize
function setHtmlFontSize () {const htmlWidth = document.documentElement.clientWidth || document.body.clientWidthconst htmlDom = document.getElementsByTagName('html')[0]htmlDom.style.fontSize = htmlWidth / 10 + 'px'
}
setHtmlFontSize()
  1. 图片列表的横向滚动需求:
    这里的实现方式是使用了一个较好的vue滚动组件,better-scroll是什么。

BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。它的核心是借鉴的 iscroll (opens new window) 的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化。

BetterScroll 是使用纯 JavaScript 实现的,这意味着它是无依赖的。

模板的层级有要求: itemContainer -> imageWrapper -> imageItem,其中itemContainer需要固定宽度和隐藏滚动条。

<div class="itemImage" ref="itemContainer"><!--需要支持横向滚动--><ul ref="imageWrapper"><li class="image_item" :key="image.id" v-for="(image, index) in item.images" ref="imageItem"><img class="image" :src="image.big"/></li></ul></div>
.itemImage {overflow: hidden;width: 750px;
}

方法中使用到了vue的nextTick可以指定下一次DOM更新之后再执行的方法。

mounted () {this.$nextTick(() => {this.initImageScroll()})},
methods: {initImageScroll: function () {let width = 0for (let i = 0; i < this.item.images.length; i++) {width += this.$refs.imageItem[0].getBoundingClientRect().width}this.$refs.imageWrapper.style.width = width + 'px'this.$nextTick(() => {if (!this.scroll) {this.scroll = new BScroll(this.$refs.itemContainer, {startX: 0,click: true,scrollX: true,scrollY: false,eventPassthrough: 'vertical'})} else {this.scroll.refresh()}})},
}
  1. 路由跳转返回后的自动滚动复位问题

这个问题在vue-router的官方问题中有说明:滚动行为 | Vue Router 这里只贴下在vue-router实例化时加入实现的样子:

export default new Router({routes: [{path: '/',name: 'Main',component: Main,meta: {keepAlive: true}},{path: '/ImagePlayer',name: 'ImagePlayer',component: ImagePlayer,meta: {}}],scrollBehavior (to, from, savedPosition) {if (savedPosition) {return savedPosition} else {if (from.meta.keepAlive) {from.meta.savedPosition = document.body.scrollTop}return { x: 0, y: to.meta.savedPosition || 0 }}}
})
  1. 子元素浮层滚动时阻止父元素随动问题

这个需求其实很常见,出现浮层后,在浮层上展示内容,当在浮层上有滚动操作是,需要防止底部元素同时滚动。我这里的解决方法是用position=fixed的方式来固定。

  • 当浮层出现时,动态将底部元素的根元素设置为fixed,并记录当前的scrollY值
  • 当浮层消失后,动态将底部元素的根元素设置回原始值,并滚回到scrollY位置(由于重新设置position后会位置复位)

实现方法如下:

 /*** 防止浮层唤起时底部滑动跟随问题* @param isFixed*/stopBodyScroll: function (isFixed) {let bodyEl = document.getElementById('main')if (isFixed) {this.saveMainTop = window.scrollYbodyEl.style.position = 'fixed'bodyEl.style.top = -this.saveMainTop + 'px'} else {bodyEl.style.position = ''bodyEl.style.top = ''window.scrollTo(0, this.saveMainTop)}}
  1. 使用mt-loadmore时loading不消失问题

这个问题是文档没看清楚导致的,没有在正确的时机调用其内部子组件的onTopLoaded
方法导致,这里记录下mt-loadmore做下拉刷新的的方式:代码只保留了片段,在loadtop方法里有两个loadmore的ref原因是,在我的应用里分两个tab,同时都有下拉刷新功能,这里扔出来的原因是,大家需要注意,在同一个组件内,如果使用了多个mt-loadmore组件,那需要标识不同的ref值,比如我这里的loadmore1和loadmore2,要不然当调用onTopLoaded方法是会有各种异常出现,包括不能停止当前loading

 <!--下拉刷新列表-->
<template>
<div><mt-loadmore :top-method="loadTop" :top-loading-text="null" :top-drop-text="null":top-pull-text="null"ref="loadmore1" @top-status-change="handleTopChange">
</div>
</template>
<script>
export default {methods: {/***  下拉刷新*/loadTop: function () {if (this.selected === '1') {this.getYourData01(() => {this.$refs.loadmore1.onTopLoaded()})} else {this.getYourData02(() => {this.$refs.loadmore2.onTopLoaded()})}},}
}
</script>

作者:萝卜日志
链接:https://www.jianshu.com/p/1bb9792ec289

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_325491.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Jetpack Compose 中创建 Drawer

Jetpack Compose 是一个现代的构建 Android UI 的工具集&#xff0c;它使得构建 UI 变得更加简单快速。在本篇博客中&#xff0c;我们将讨论如何在 Jetpack Compose 中创建 Drawer&#xff0c;也就是我们常见的侧边抽屉。 什么是 Drawer&#xff1f; Drawer 是一个提供导航选项…

基于Transformer视觉分割综述

基于Transformer视觉分割综述 SAM &#xff08;Segment Anything &#xff09;作为一个视觉的分割基础模型&#xff0c;在短短的 3 个月时间吸引了很多研究者的关注和跟进。如果你想系统地了解 SAM 背后的技术&#xff0c;并跟上内卷的步伐&#xff0c;并能做出属于自己的 SAM…

GC回收器演进之路

目录 未来演进方向 历经之路 引用计数法 标记清除法 复制法 标记整理 分代式 三色标记法的诞生 三色标记法的基本概念 产生的问题 问题 1&#xff1a;浮动垃圾 问题 2&#xff1a;对象消失 遍历对象图不需要 STW 的解决方案 屏障机制 插入屏障&#xff08;Dijks…

Autosar诊断系列介绍17 - 物理寻址及功能寻址详解

本文框架 前言1. 物理寻址及功能寻址基本概念1.1物理寻址及功能寻址-定义1.2两种寻址方式区别1.3不同诊断服务寻址方式配置 2.不同寻址方式的应用场景 前言 UDS&#xff08;Unified Diagnostic Services&#xff09;协议&#xff0c;即统一的诊断服务&#xff0c;是面向整车所…

基于SQLI的SQL字符型报错注入

基于SQLI的SQL字符型报错注入 一. 实验目的 理解数字型报错SQL注入漏洞点的定位方法&#xff0c;掌握利用手工方式完成一次完整SQL注入的过程&#xff0c;熟悉常见SQL注入命令的操作。 二. 实验环境 渗透主机&#xff1a;KALI平台 用户名: college 密码: 360College 目标网…

JAVA麻将胡牌算法深度解析

目录 麻将的基本概念 麻将牌的构成 麻将的碰&#xff0c;杠&#xff0c;吃&#xff0c;听&#xff0c;胡 麻将胡牌条件 胡牌算法简介 选将拆分法 算法数据结构 构建数据结构 数据结构使用 牌花色的获取 获取某一花色的牌值 获取某一张牌相邻牌 算法代码实现 基础代…

Web3.0 应用开发:选择合适的框架和工具至关重要

随着 Web3.0 时代的到来&#xff0c;区块链技术的普及和应用让去中心化的应用开发变得更加可行。然而&#xff0c;要开发出高效、稳定和安全的 Web3.0 应用&#xff0c;选择合适的框架和工具至关重要。本文将介绍 Web3.0 应用开发的关键因素&#xff0c;帮助开发者做出明智的选…

Hive Metastore 表结构

Hive MetaStore 的ER 图如下。 部分表结构和说明。 CTLGS(CATALOGS) catalogs 可以隔离元数据。默认只有1行。一个 CATALOG 可以有多个数据库。 mysql> DESC CTLGS; -------------------------------------------------------- | Field | Type | Null |…

海康明眸设备SDK二次开发NET_DVR_SetupAlarmChan_V41老是报109错误

请仔细阅读图2中的文件&#xff0c;这里详细介绍了怎么样 放置DLL&#xff0c;务必按照图3中的说明步骤进行放置。HCNetSDKCom文件夹一定也要拷贝到debug目录&#xff0c;否则就会出现类似于109的错误提示。

NR 吞吐量测试

前言 参考文档&#xff1a; 5G NR TBS (Transport Block size) Calculator | 5G-Tools.com 5G NR Transport Block Size (TBS) Calculation - Techplayon 5G MCS _ 搜索结果_哔哩哔哩_Bilibili 4/5G无线资源和数据调度流程:CQI上报、基站AMC调度、调度信息DCI下发、CQI到MCS的对…

网联V2X视频事件检测相机使用说明书

1 产品概览 网联 V2X视频事件检测相机 视频事件检测相机 &#xff0c;内置 1/1.8″逐行扫描 800万像素传感器&#xff1b;视 万像素传感器&#xff1b;视 频编码协议支持 H.265、H.264、MJPEG&#xff1b;具有 1个 10M/100M/1000M自适应以 太网 RJ45接口、 1路 RS485接口&#…

Windows基于WSL搭建Python数据分析环境

最近配置了一台较为不错的台式机&#xff0c;记录下自己配置环境的过程。 安装WSL&#xff0c;提供Linux环境 如果你发现后续的命令无法运行或者说软件商城中找不到&#xff0c;这可能意味着你的操作系统不符合要求。WSL安装要求 Windows 10 version 2004&#xff08;Build 19…

Go程序结构- package和import

1、包和文件 在Go语言中包的作用和其他语言中的库或模块的作用类似&#xff0c;用于支持模块化、封装、编译隔离和重用。关键点如下&#xff1a; (1)包中保存一个或者多个.go结尾的文件&#xff0c;而包的目录就是包的导入路径 (2)中Go中通过一条简单的规则来管理标识符是否对外…

SpringBoot 3.1 新版HTTP调用

在SpringBoot3版本发布后 官方便声明了推荐使用了内置声明式的HTTP客户端。 一、声明式HTTP客户端使用(依赖引入) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></depende…

Gradio库中的HighlightedText组件

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

https 证书到期,手动更新

-1. 这里有第一次配置 https 证书步骤 https://blog.csdn.net/u013633921/article/details/129941674 0. 记录一下&#xff0c;因为 3 个月后还会用到的。。 1. 验证域名所有权&#xff08;在某个目录下放置指定文件验证&#xff09; http://172.245.xxx.xxx/.well-known/pki-…

【MATLAB笔记】基础函数及向量

一、基础函数绘制 版本&#xff1a;Matlab2021a 实例1&#xff1a;生成向量 >> x0:0.1:30; >> ysin(x).*cos(x); >> plot(x,y) 实例2&#xff1a;创建向量 >> xlinspace(0,2*pi); >> ysin(x) >> plot(x,y) 二、向量的点积 >> a…

STM32实战项目—密码锁

该项目的完整工程可以在博主的资源里找到&#xff0c;仅供参考。 文章目录 一、任务要求二、实现方法2.1 输入密码判断2.2 管理员模式2.3 修改密码 三、程序设计3.1 输入密码判断3.2 进入管理员模式3.3 修改密码 四、问题总结4.1 输入内容一直提示Error4.2 密码判断一直错误 五…

云原生之深入解析Hadoop如何在K8S环境中部署

一、准备工作 Hadoop 是 Apache 软件基金会下一个开源分布式计算平台&#xff0c;以 HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce&#xff08;Hadoop2.0 加入了 YARN&#xff0c;Yarn 是资源调度框架&#xff0c;能够细粒度的管理和调度任务&…

Matlab无人机算法开发套件上新,快速实现控制算法到无人机平台的移植

在现有的旋翼无人机市场中&#xff0c;绝大部分可二次开发的产品都只提供C、C等SDK&#xff0c;但在科研类无人机这一细分领域中&#xff0c;更多的开发者偏好或善于使用Matlab进行算法的开发和验证。为了助力从事控制算法理论研究的开发者&#xff0c;能够独立完成控制算法到无…