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

在这里插入图片描述

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

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找了很多时间来着。还有其实是别人不断的打断我。现在是下午了,好饿啊

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

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

相关文章

抖音矩阵系统源码:开发搭建与技术详解

一、 抖音矩阵系统源码开发概述 抖音短视频seo矩阵系统源码是一款在高速数据处理和分析方面表现卓越的系统。它结合了各种先进的技术,包括深度学习、大数据分析和可视化等,使得抖音在信息处理时更加高效和准确。 该系统源码的开发搭建需要多方面的技术支…

2023网络安全面试题汇总(附答题解析+配套资料)

随着国家政策的扶持,网络安全行业也越来越为大众所熟知,相应的想要进入到网络安全行业的人也越来越多,为了更好地进行工作,除了学好网络安全知识外,还要应对企业的面试。 所以在这里我归总了一些网络安全方面的常见面…

性能测试:Jmeter压测过程中的短信验证码读取

目录 问题背景 解决思路 实现方法 1. 建立JDBC连接 2. 使用JDBC请求获取验证码 3. 使用正则将验证码提取并使用 总结: 问题背景 现如今国内的大部分软件或者网站应用,普遍流行使用短信业务,比如登录、注册以及特定的业务通知等。 对…

Enterprise:通过 App search 摄入数据

App Search 是 Elastic Enterprise Search 的一部分,Elastic Enterprise Search 是由 Elasticsearch 提供支持的内容搜索工具集合。 最初由 App Search 引入的一些功能(例如网络爬虫)现在可以直接通过企业搜索使用。 将这些功能与其他企业搜…

密码学学习笔记(十二):压缩函数 - Davies–Meyer结构

密码学中压缩函数是指将输入的任意长度消息压缩为固定长度输出的函数。压缩函数以两个特定长度的数据为输入,产生与其中一个输入大小相同的输出。简单来说就是它接受一些较长的数据,输出更短的数据。 压缩函数接收长度为X和Y的两个不同输入,并…

青岛大学_王卓老师【数据结构与算法】Week05_14_队列的顺序表示和实现2_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础…

回归预测 | MATLAB实现基于ELM-Adaboost极限学习机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于ELM-Adaboost极限学习机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于ELM-Adaboost极限学习机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于ELM-Adaboost极限学…

Java线程相关

线程优先级 在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的…

【基于 GitLab 的 CI/CD 实践】01、GitLab CI/CD 基础概念

目录 一、为什么要做 CI/CD ? 1.1 背景-传统的应用开发发布模式 问题 1.2 持续集成与持续交付 持续集成(CI) 持续交付(CD) 持续部署(CD) 1.3 CI/CD 的价值体现 1.4 推荐常用的 CI/CD 工…

Linux内核结构与特性简介

系统调用接口:位于最上层,实现了一些基本的功能,如read和write等系统调用。这是用户空间程序与内核交互的接口,提供了对内核功能的访问。 内核代码:位于系统调用接口之下,可以看作是独立于体系结构的通用内…

linux之Ubuntu系列(四)用户管理 用户和权限 chmod 超级用户root, R、W、X、T、S 软链接和硬链接 shell

r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。 w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移…

基于单片机快递柜的设计与实现

功能介绍 以51单片机作为主控系统;液晶显示当前信息,最多可存储几十个;按下存储按键液晶显示当前快递柜剩余数量;继电器打开,表示用来放物品;正次按下存储按键将取消存快递,继电器关闭快递柜可用…

Spark编程-使用SparkCore求TopN,Max_Min_Value

简介 使用SparkCore求top5值编程,最大最小值 求订单前五的TOP5值 数据 数据字段如下:orderid,userid,payment,productid 需求如下:从文本文件中读取数据,并计算出前5个payment(订单的付款金额)值 //字段 orderid,userid,payme…

在 3ds Max 中对二战球形炮塔进行建模

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 实际上被称为“斯佩里球炮塔”,它被用于二战的B-17和B-24轰炸机。 本教程介绍如何在 3ds Max 中对球形转塔进行建模。建模时,您将使用背景图片作为辅助。首先创建一个低多边形球体。…

视频融合平台EasyCVR登录后通道数据及菜单栏页面显示异常的排查与解决

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。 有用…

Windows11 C盘瘦身

1.符号链接 将大文件夹移动到其他盘,创建成符号链接 2.修改Android Studio路径设置 1.SDK路径 2.Gradle路径 3.模拟器路径 设置环境变量 ANDROID_SDK_HOME

存量市场下,雅迪的高端化之路举步维艰?

为了让自家的高端产品成功“突围”,雅迪在营销上无所不用其极。 继在央视大楼高调发布后,近日雅迪冠能探索E10完成了力战70吨游艇、无惧24吨雨水冲刷、制霸百公里全地形等极限挑战,“树立起新一代两轮电动车豪华标杆旗舰”。 图源&#xff1…

字节跳动后端面试,笔试部分

var code "7022f444-ded0-477c-9afe-26812ca8e7cb" 背景 笔者在刷B站的时候,看到了一个关于面试的实录,前半段是八股文,后半段是笔试部分,感觉笔试部分的题目还是挺有意思的,特此记录一下。 笔试部分 问…

Jmeter性能测试,通过插件监控服务器资源使用情况

Jmeter作为性能测试的首选工具,那么在性能测试过程中如何方便快捷的监测服务器资源使用情况? 可以通过jmeter 安装"PerfMon(Servers Performance Monitoting)"插件并配合服务端资源监控工具进行实现,详细操作流程如下:…

【微信机器人开发

现在并没有长期免费的微信群机器人,很多都是前期免费试用,后期进行收费,或者核心功能需要付费使用的。 这时如果需要群机器人帮助我们管理群聊,建议大家使有条件的可以自己开发微信管理系统。了解微信群机器人的朋友都知道&#x…