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

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

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

相关文章

# Pytorch 深度卷积模型的特征可视化

Pytorch 深度卷积模型的特征可视化 1. 模型构建与可视化1.1 确定当前模型各层名称1.2 模型构建1.3 模型训练2. 训练过程可视化与特征图2.1 获取完整节点信息2.2 可视化参考文献资料1. 模型构建与可视化 1.1 确定当前模型各层名称 可视化模型的特征层需要打印各层的名称: 安装…

数据结构单向循环链表,创建以及增删改查的实现

一、单向循环链表的描述 循环链表:是另一种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头节点,整个链表形成一个环。 单向循环链表的操作和单链表操作基本一致,差别在于:当链表遍历时,判别当前指针p是…

ChatGPT是否具有记忆能力?

ChatGPT在某种程度上具有记忆能力,但它的记忆能力有限且不像人类的记忆那样全面和持久。以下是对ChatGPT的记忆能力的详细分析: 1. 上下文记忆:ChatGPT可以在对话过程中记住先前的对话历史,以便更好地理解和回应后续的问题。通过…

vue+element Cascader 级联选择器 > 实现省市区三级联动

vueelement Cascader 级联选择器 > 实现省市区三级联动 先看下实现效果吧&#xff08;嘻嘻&#xff09; 看完我们就开始啦 安装element-china-area-data1 npm install element-china-area-data5.0.2 -S上代码 <el-cascadersize"large":options"options…

Http相关

Q&#xff1a;RESTful接口风格是什么&#xff1f; RESTful API 是一种基于 REST&#xff08;Representational State Transfer&#xff0c;表现层状态转移&#xff09;架构风格的 API 设计规范&#xff0c;它的核心思想是资源&#xff08;Resource&#xff09;和 HTTP 方法&am…

CRC校验原理全面解读

目录 1. 简介2. 原理2.1 CRC的发送与接收2.2 CRC校验码的生成2.3 CRC校验码的校验 3. 拓展问题3.1 模2除法为什么等同于异或运算&#xff1f;3.2 为什么除数的位数和被除数补充的位数相差为1&#xff1f;3.3 为什么CRC校验码不能纠正错误&#xff0c;只能检测错误&#xff1f; …

基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)

目录 一、什么是Selenium&#xff1f; 二、自动化测试框架 三、自动化框架的设计和实现 四、需要改进的模块 五、总结 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 一、什么是Selenium&#xff1f; …

会员管理系统如何深度绑定用户?会员系统必备哪些功能?

在以消费者为主导的企业&#xff08;商家&#xff09;范围内&#xff0c;实行会员制管理能够更好的提升客户的忠诚度&#xff0c;减少客户的流失。完整、精确的会员管理系统&#xff0c;更能提升企业&#xff08;商家&#xff09;的实际效益。 蚓链会员管理系统(专业版) 便是这…

笔记:Nodejs 实时向 C++ 编译的可执行文件给予输入和获取输出

背景 我和几个同学当时想要去做一个多人联机的平面小游戏&#xff0c;但需要渲染视野。然而我们不会&#xff0c;只好请教大佬&#xff0c;而大佬不会 Javascript&#xff0c;所以他给我们的是 C 编译后的可执行文件&#xff0c;这就产生了延时。 原始方案 我当时写的是每一次…

02 QPushButton的基本使用

Tips: 在使用控件的时候如果没有智能提示&#xff0c;可能是没有包含头文件 在运行时&#xff0c;报【invalid use of xxx】可能是没有包含相关头文件 如果出现中文乱码&#xff1a;设置编译器的编码格式为UTF-8 本节主要包含创建一个按钮控件、显示按钮、设置按钮的父窗口、设…

Centos7安装Docker

Centos7安装Docker 目录 环境准备 安装Docker 启动Docker 切换源 启动第一个容器 环境准备 切换root权限 su root 升级所有包同时也升级软件和系统内核 yum -y update 卸载旧版本 yum remove docker docker-common docker-selinux docker-engine 卸载旧版本 yum rem…

UG\NX二次开发 捕获NX OPEN C++异常,乱码问题

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 捕获NX OPEN C++异常,乱码问题。 效果: 使用uc1601(ex.what(),1)显示乱码 使用 NXMessageBox()->Show("Block Styler", NXMessageBox::DialogTypeError, ex…

rce题目

<?php include "flag.php"; highlight_file(__FILE__); if(isset($_GET[HECTF])) { if (; preg_replace(/[^\W]\((?R)?\)/, NULL, $_GET[HECTF])) { if (!preg_match(/pos|high|op|na|info|dec|hex|oct|pi/i, $_GET[HECTF])) { eval(…

Kubernetes Volume及其类型(NFS、SAN) - PV - PVC - PV与PVC与Pod的关系

目录 volume 卷 官方文档&#xff1a;卷 | Kubernetes 一、emptyDir&#xff08;临时卷&#xff09; 二、hostPath卷 type字段参数 hostPath 实验&#xff1a; 三、第3方提供的存储卷&#xff08;百度云、阿里云、亚马逊云、谷歌云等&#xff09; 四、local卷 五、NF…

揭秘企业到底为什么要设立帮助中心

帮助中心是企业一个非常关键的客户服务工具&#xff0c;它可以帮助企业给客户提供高质量的售后支持和解决方案。在现在这个客户至上的年代&#xff0c;不仅要向客户提供优质的产品&#xff0c;卓越的售后服务也是不可缺少的。接下来我们就从企业和客户的角度展开讲讲为什么要设…

Nautlius Chain主网正式上线,模块Layer3时代正式开启

Nautilus Chain 是在 Vitalik Buterin 提出 Layer3 理念后&#xff0c; 对 Layer3 领域的全新探索。作为行业内首个模块化 Layer3 链&#xff0c;我们正在对 Layer3 架构进行早期的定义&#xff0c;并有望进一步打破公链赛道未来长期的发展格局。 在今年年初&#xff0c;经过我…

在有序数组中查找元素第一个和最后一个位置

某个大厂面试手撕代码遇到的题&#xff0c;血泪的教训&#xff1a; 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计…

WPF 复制粘贴到系统粘贴板

复制或剪切文件到剪切板 /// <summary>/// 复制或剪切文件到剪切板/// </summary>/// <param name"files">文件路径数组</param>/// <param name"cut">true:剪切&#xff1b;false:复制</param>public static void C…

Java读取Excel 单元格包含换行问题

Java读取Excel 单元格包含换行问题 需求解决方案 需求 针对用户上传的Excel数据&#xff0c;或者本地读取的Excel数据。单元格中包含了换行&#xff0c;导致读取的数据被进行了切片。 正常读取如下图所示。 解决方案 目前是把数据读取出来的cell转成字符串后&#xff0c;…

Flask新手教程

Flask简介 Flask是一个轻量级的可定制框架&#xff0c;使用Python语言编写&#xff0c;较其他同类型框架更为灵活、轻便、安全且容易上手。 Flask 可以很好地结合MVC模式进行开发&#xff0c;开发人员分工合作&#xff0c;小型团队在短时间内就可以完成功能丰富的中小型网站或…