Vant源码解析(四)----Popup弹出层,详解样式方法

news2024/11/25 22:30:43

在这里插入图片描述

这个功能,自己也手写过,毕竟有很多弹窗的嘛。
我自己写就是:一个背景层,然后一个盒子里面放内容。再写个显示隐藏事件。够够的了。

Vant的Popup弹出层

页面结构

短短一个背景加内容盒子,vant套了几层。

这是引用的组件
在这里插入图片描述
这是组件的遮罩层
在这里插入图片描述
这是内容盒子
在这里插入图片描述

这个组件的js逻辑不复杂,就是一个显示隐藏,复杂的是样式问题。

这个弹出层,可以从上下左右,中间这几个方向弹出来;能显示关闭按钮;以及圆角弹窗样式。之前的文章已经解释过,样式的逻辑。因为我忘记了,所以再解释一遍。

能够从不同方向弹出来,主要是通过样式控制,通过变量控制样式css.

因为没有看懂show这个字段是怎么传过来的,因此跑去研究overlay遮罩层了。

overlay

在这里插入图片描述

好的,我们开始研究这个遮罩层怎么实现的。
我的逻辑,一个盒子显示隐藏的问题。

在这个组件下,我又发现了个新的组件transition,原来这个才是真正的遮罩层。哇哦,这个组件是个动画,我吐了。然后我发现控制显示和隐藏,用的是这个文件

在这里插入图片描述
通过inited和display进行控制显示隐藏。

style()方法

我们来看下,最最基础的style()方法,它在wxs里面。
你看,有个判断数组的方法,判断对象的方法。
在判断数组方法里,用了filter进行过滤空数据,然后过滤出来的数组进行map循环,重新调用style()方法
在判断对象方法里,用了keys获得属性数组,然后通过filter进行过滤出空数据,过滤出来的数组进行map循环,并且在这个方法里进行字符串的拼接。
例如:
{color:red,font-size:24px},通过拼接变成:colo:red;font-size:24px;
最后进行返回

在这里插入图片描述

在这里插入图片描述

bem()方法

在这里插入图片描述

在这里插入图片描述

这个方法是参数入口,调用traversing方法,然后输出join方法
conf 的参数: [“center”,{“round”:false,“safe”:true,“safeTop”:false,“safeTabBar”:false}]
name的参数: popup

在这里插入图片描述

这个方法中,mods是个空数组,conf是传过来的参数: [“center”,{“round”:false,“safe”:true,“safeTop”:false,“safeTabBar”:false}]
这个方法里有if判断,通过typeof进行判断,如果是string或者number,则添加到数组mods中。
如果这个值是数组的话,通过forEach方法,循环调用了travesing()方法。
如果这个值是对象的话,通过keys获得数组,遍历方法中,如果值为真,把key添加到数组中。

在这里插入图片描述

这个方法的作用是拼接字符串。
得到:van-popup van-popup–center van-popup–safe

在这里插入图片描述

到此,样式的逻辑就完成了,得到元素。

在这里插入图片描述

好的,现在我们在来看下inited和display变量的数据的变化是哪样的,主要和transition文件有关。
这方法的很绝,不是普通的变量变换,通过一个变量,来调用不同的方法。切换是通过show这个变量进行切换。
不得不说,我想不到,我也不知道为啥要这样做。
可能为的是enter()和leave().

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所以我们在来聊下这2个方法吧。

enter()方法

这个方法中获取了classNames的类名,获取的currentDuration的时间,最最重要的它设置了inited和display为true,这样弹窗就会显示出来啦啦啦啦。还设置了classes,我感觉在这个组件没啥用。然后异步调用,再次更新classes,我觉得是动画那块的东西。

在这里插入图片描述

leave()

这个方法隐藏弹窗的时候会进行调用,这个时候,我就先盯着display这个变量,然后发现它在onTransitionEnd这个方法里进行变量的切换。其他的应该和动画相关。但是我发现inited没有进行处理

在这里插入图片描述
在这里插入图片描述

其他这个组件,我发现了个bug,在返回当前页面,并且需要弹框的时候,它不会出现,控制显示隐藏的变量是正确的,就是不会渲染。我猜想会不会和inited有关系。我准备试下。

我试了下,我的项目不行,vant的可以,难道是因为我的vant组件太老的原因?无语了。看了下逻辑都一样。
然后发现是视图层的原因,我的项目,那个没有渲染出来。

最后,我发现了,问题出现在这个方法,渲染的问题。

我的项目

在这里插入图片描述

现在vant的项目

在这里插入图片描述

感想

嗯,我的项目要更新vant组件,然后这个bug找了很多时间来着。还有其实是别人不断的打断我。现在是下午了,好饿啊

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 系统修改已经打好jar包的yml配置文件

工作中可能回遇到,jar包已经打好,并且文件已经上传了,但是突然发现配置文件中的某一个参数写错了,怎么办?重新打包?如果重新打包再上传的话太影响效率了。那么我们可以通过以下方法,修改已经上传…

致远电子冲刺上市:计划募资8亿元,实控人周立功、陈智红已离婚

7月18日,深圳证券交易所披露的信息显示,其已向广州致远电子股份有限公司(下称“致远电子”)发出第1轮审核问询函。据贝多财经了解,致远电子于2023年6月21日在深圳证券交易所递交招股书,准备在创业板上市。 …

2023最新版本Activiti7系列-事件篇

事件篇 事件(event)通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN 2.0中,有两种主要的事件分类:*捕获(catching)与抛出(throwing)*事件。 捕获: 当流程执…

【java】【基础1】数据类型运算符

目录 一、数据类型(4大类8种) 1.1类型转换 1、自动类型转换 2、表达式的自动类转换 3、强制类型转换 二、运算符 2.1基本算术运算符 2.2自增自减运算符 2.3赋值运算 2.4关系运算符 2.5逻辑运算符 2.6三元运算符 2.7运算符的优先级 三、API文档&am…

中国人民大学与加拿大女王大学金融硕士——行而不辍,履践致远

理论和实践哪个重要呢,申克・阿伦斯曾说过:“如果没有理论的指导,实践就会变得盲目;而如果没有实践的充实,那么理论就会显得空洞”。学习不能停留在理论层面,要用于实践才能真正的消化吸收。学习的目的在于…

第一次实操Python+robotframework接口自动化测试

目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出,通过关键字的封装实现一定意义上的脚本与用例的脱离! robot framework 的安装不过多说明,网上资料比较太多~ 实例:!!!&#xff01…

【数学建模】--典型相关分析

典型相关分析(Canonical Correlation analysis)研究两组变量(每组变量中都可能有多个指标)之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系。 例子: 典型相关分析定义: 列题分析&…

visual studio中Git同步提交 报错:管道已结束

这里出现了在提交到远程的时候,vs提示管道已结束。 这里我的解决办法是使用git bash来手动提交 找到仓库的目录,右键找到gitbash的选项,输入add指令来添加文件到暂存区 git add .输入commit指令来将暂存区文件提交到本地仓库 git commit…

内核机制在以下方面发挥作用:

进程间通信:内核提供了特定的机制和接口,用于实现进程间的通信。这可以包括共享内存、管道、消息队列、信号量等。通过这些机制,进程可以在内核的帮助下进行数据传输和同步,实现进程间的协作和通信。 进程调度:内核负…

JAVA集成国密SM2

JAVA集成国密SM2加解密 一、pom配置二、代码集成2.1、目录结构2.2、源码2.3、测试 三、相关链接 国密算法概述:https://blog.csdn.net/qq_38254635/article/details/131801527 SM2椭圆曲线公钥密码算法 为非对称加密,基于ECC。该算法已公开。由于该算法…

详细解析张雪峰老师对计算机专业的评价“进可攻,退可守”--【职场篇】

文章目录 张雪峰的评价计算机行业类的总结性指示就业面宽进可攻,退可守另一个就业出口--培训 持续学习,技术过人 总结 张雪峰的评价 计算机行业类的总结性指示 “就业面宽,进可攻,退可守,各行各业其实对计算机专业都有…

确保安全:选择企业邮箱的五大关键因素!

为您的企业或组织选择正确的邮箱地址可以帮助您确保数据和通信的安全性。不安全的邮箱地址会使您容易受到垃圾邮件、病毒和网络钓鱼攻击。这里有一些小技巧可以帮助你选择一个安全的公司邮箱地址。 1.选择一个你可以信任的邮箱提供商 选择一个安全的公司邮箱地址的第一步是确保…

JavaScript入门——笔记用

JavaScript入门 变量数组常量模板字符串检测数据类型判断分支判断循环数组函数对象 与html和css不同的是js并不是一门标记语言,而是与java等相同,也是一门编程语言(实现人机交互的运行在客户端即浏览器的编程语言) JavaScript作用…

算法训练营第四十三天||● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

● 1049. 最后一块石头的重量 II 这道题和昨天的分割等和子集一样&#xff0c;只是最后返回值不一样 class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int i 0;i<stones.size();i){sum stones[i];}int target sum / 2;…

结构型模式 - 享元模式

概述 定义&#xff1a; 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销&#xff0c;从而提高系统资源的利用率。 结构 享元&#xff08;Flyweight &#xff09;模式中存在以下两种状态&…

Python案例之新浪世界杯各国球队数据(德国VS日本)

目录标题 前言知识点:开发环境:实现代码:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 知识点: 动态数据抓包 requests发送请求 json数据解析 开发环境: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 requests pip install requests 第三方模块…

linux系统上安装R语言并安装mclust包

请注意&#xff0c;如果你本来就是root账号&#xff0c;则所有的sudo都不用加。 x.1 安装R语言 安装R语言建议使用清华源&#xff0c;链接https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/linux/ubuntu/ 把下面这一串代码在terminal中全部输入便可&#xff0c;5000个R包也建…

分类管理业务开发 -- 手把手教你做ssm+springboot入门后端项目黑马程序员瑞吉外卖(四)

文章目录 前言一、开发功能预览二、公共字段自动填充1.问题分析2.代码实现3.功能测试4.功能完善 三、新增分类1.需求分析2.数据模型3.代码开发4.功能测试 四、分类信息分页查询1.需求分析2.代码开发3.功能测试 五、删除分类1.需求分析2.代码开发3.功能测试4.功能完善 六、修改分…

VS2013配置所有项目附加包含目录的办法

任意打开一个项目&#xff0c;点击视图->其他窗口->属性管理器 在属性管理器中打开Debug|Win32&#xff0c;找到Microsoft.Cpp.Win32.user&#xff0c;双击打开 直接配置VC的附加包含目录就可以了 之后所有项目都会继承这些目录 这样就不用为每个项目配置库包含目录了…

[微信小程序] 关于自定义字体的坑

报错&#xff1a; [渲染层网络层错误] Failed to load local font resource... the server responded with a status of 500 (HTTP/1.1 500 Internal Server Error) ... 原因&#xff1a;小程序不允许引用本地ttf等字体文件 解决办法&#xff1a;改成网络引用&#xff0c;或者…