小点心,顾名思义,开箱即食,拿来即用。

献上第二个小点心:SlidePopup

GitHub

在线演示

GitHub 上欢迎大家来找茬^_^

前端朋友们,今天要介绍的这款小点心牛B了。相信是个前端都应该接触过这种效果,而且是非常流行的交互。

闲话少叙,先上效果图:

基本使用

多个可自定义的选项

来不及解释了,立即查看示例

这种弹窗的使用场景主要出现在移动端。

先定一个小目标:

  • 易用性,如果自己都觉得难用,那就没有分享的必要了 ̄□ ̄||;
  • 兼容性,兼容主流浏览器,但并非所有(比如 IE 低版本);
  • 移动优先,主要为移动端做更多的考虑;

为了以后不必再为写这种效果烦心,特此写了【底部浮现弹窗】小插件。

使用

通用弹窗(NormalPopup) 几乎相同的API,因为他们继承自同一个父类,这正是面向对象的巨大魅力。

注意事项:遮罩和主体分离

不同于 通用弹窗(NormalPopup),使用 SlidePopup 时最好弹窗的遮罩和主体是分离的(相信你可以通过组织 html 结构和 css 样式轻松做到这点),因为需要对遮罩和主体执行不同的动画,遮罩是做渐现效果,而主体是做上滑效果,如果遮罩和主体缠在一块,结果你懂的。

最佳实践: 请矢志不渝地做好遮罩和主体分离^_^

下面是 SlidePopup 最简单的使用:

const popupA = new SlidePopup({
popup: '#popup-A',
openBtn: '.open-popup-A',
closeBtn: '.close-popup-A',
})

简单,简单是很重要的。【尽可能简单】是在设计小点心系列 API 时的第一原则。

雷区

这里有一些在使用 SlidePopup 时容易导致 bug 的地方,其中的大部分都不容易碰到,但为了避免你在遇到它们时大骂“沃特法克”,请仔细阅读它们。

popup 上禁止 transform

SlidePopup 内部通过操作 transform 样式制造 css3 动画。为什么选择 transform? transform 的 3D 变换可触发硬件加速,从而打造丝般顺滑的动画体验。这是跟着 Swiper 老哥学的^_^。实际上,如果你在 popup 上应用了 transform,SlidePopup 会报错(throw Error),程序会直接挂掉,小点心也是有脾气的。所以你不必记住它,SlidePopup 会在控制台提示你。

相信我,通过精心组织 html 结构和 css 样式是很容易做到这一点的。So,make me happy,make you easy^_^

最佳实践: 精心组织 html 和 css,始终不在 popup 上 transform。

popup 样式覆盖

为了使用起来尽可能方便,SlidePopup 将样式封装在了插件内部,否则就需要像 Swiper 那样引入一个 js 文件,再引入一个 css 文件,再小心翼翼地往 html 上添加 css 类名。

由于是从【底部】浮现,不是左,不是右,不是上,而是底部。因此,SlidePopup 会给 popup 添加一些样式以确保弹窗在【底部】:

position: fixed !important;
top: auto !important;
bottom: 0 !important;
margin-bottom: 0 !important;

这几行样式可以确保弹窗是从【底部】冉冉升起的,一般弹窗的样式是不会与这几行冲突的,如果你执意要跟这几行对着干,那么结果可能不会尽如人意。

最佳实践:请务必保证上面几行样式生效。

移动端 cursor:pointer

这不是本插件应该注意的,而是整个移动前端开发都应该注意的。某些 iPhone 机型上如果【可点击元素】没有设置这个样式,将不会触发点击事件。所以确保你在可点击元素上设置了 cursor:pointer。在使用本插件时,那些打开按钮,关闭按钮,点击遮罩关闭,点击 document 空白区域关闭弹窗等等可点击的元素 SlidePopup 都没有做添加 cursor:pointer 处理,都需要使用者在编写样式时自行加上。

最佳实践:在【可点击元素】上设置 cursor:pointer

文件列表

小点心 UMD(Development) UMD(Production) ES Module
Full es6Dessert.js
(17.35kb)
es6Dessert.min.js
(8.11kb)
es6Dessert.esm.js
(11.66kb)
通用弹窗 NormalPopup.js
(10.23kb)
NormalPopup.min.js
(4.83kb)
NormalPopup.esm.js
(6.56kb)
底部浮现弹窗 SlidePopup.js
(15.35kb)
SlidePopup.min.js
(7.14kb)
SlidePopup.esm.js
(10.29kb)

ES6小点心第二弹——底部浮现弹窗的更多相关文章

  1. ES6小点心之通用弹窗

    小点心,顾名思义,开箱即食,拿来即用. 前端业务逻辑主要分为[交互效果]和[数据展示]两方面.数据展示可使用 MVVM 框架来实现.前端的交互效果常用的也就那么几种,比如弹窗,楼层定位,倒计时,下拉刷 ...

  2. 通通制作Html5小游戏——第二弹(仿flappy bird像素鸟)

    亲爱的博友们,我又回来啦~因为我们技术宅的思想只有技术宅懂得,好不容易写了点好玩的东西发QQ空间,结果只有11的UV,0回复....10分钟ps一个女神的素描效果发QQ空间朋友圈,一大堆回复加赞,作为 ...

  3. Struts2 小例子 --第二弹

    struts-2.5.14.1-all.zip  下载后文件夹说明 apps:war格式的例子文件 lib:引用jar包文件 src:源码文件 docs:帮助文档 小例子: 1.创建web工程:str ...

  4. LCA问题第二弹

    LCA问题第二弹 上次用二分的方法给大家分享了对 LCA 问题的处理,各位应该还能回忆起来上次的方法是由子节点向根节点(自下而上)的处理,平时我们遇到的很多问题都是正向思维处理困难而逆向思维处理比较容 ...

  5. 线段树+RMQ问题第二弹

    线段树+RMQ问题第二弹 上篇文章讲到了基于Sparse Table 解决 RMQ 问题,不知道大家还有没有印象,今天我们会从线段树的方法对 RMQ 问题再一次讨论. 正式介绍今天解决 RMQ 问题的 ...

  6. Hadoop基础-MapReduce的工作原理第二弹

    Hadoop基础-MapReduce的工作原理第二弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Split(切片)  1>.MapReduce处理的单位(切片) 想必 ...

  7. 微信小程序-自制弹出框禁止页面上下滑动

    弹出 fixed 弹窗后,在弹窗上滑动会导致下层的页面一起跟着滚动. 解决方法: 在弹出层加上 catchtouchmove 事件 两种方法:(在电脑上测试是没有用的,这是触摸事件.因此,需要在手机端 ...

  8. [Git] 003 初识 Git 与 GitHub 之加入文件 第二弹

    在 GitHub 的 UI 界面使用 Git 往仓库里加文件 第二弹 1. 选择已有的文件,点击右侧的 edit 2. 在文件中继续写入文字 小发现:我只写到第 6 行,commit 后再点进去,发现 ...

  9. 关于『HTML5』:第二弹

    关于『HTML5』:第二弹 建议缩放90%食用 咕咕咕咕咕咕咕!!1 (蒟蒻大鸽子终于更新啦) 自开学以来,经过了「一脸蒙圈的 半期考试」.「二脸蒙圈的 体测」的双重洗礼,我终于有空肝 HTML5 辣 ...

随机推荐

  1. 自学Zabbix3.8-可视化Visualisation

    随着大量数据流入Zabbix,如果用户能够查看正在发生的事情,而不仅仅是数字,那么对于用户来说,这就变得容易得多了.这就是图的所在. 图允许快速地掌握数据流,关联问题,发现什么时候开始,或者做什么事情 ...

  2. Bootstrap学习笔记(二)---常见工具和流程导航范例

    使用bootstrap框架避免不了写CSS,当CSS文件较大时,会发现维护起来很麻烦,一些默认值,如行高.背景色.标注颜色.字号等信息往往反复出现,还有一些大体上一致,只有小部分不同的样式定义,这就需 ...

  3. Jenkins+github+maven+git+linux

    Jenkins:持续集成的一个工具 github:远程存放代码 maven:利用maven创建项目,配置pom.xm依赖 git :本地仓库,可以提交代码到远程(我都是使用git 在git bush ...

  4. 手动安装cloudera manager 5.x(tar包方式)详解

    官方共给出了3中安装方式:第一种方法必须要求所有机器都能连网,由于最近各种国外的网站被墙的厉害,我尝试了几次各种超时错误,巨耽误时间不说,一旦失败,重装非常痛苦.第二种方法下载很多包.第三种方法对系统 ...

  5. STM32基础分析——USART的DMA模式

    有关USART的DMA传输模式,其基本的概念和配置,网上有很多博客和教程都有,这里不再赘述,只是记录一下比较容易忽视而造成调试不通的问题. 1. 串口发送和接收分属两个DMA通道 一般方式操作串口时, ...

  6. Mockplus设计大赛获奖选手专访 | High音:轻松生活,随心嗨音

    "看似低调,实则高调的设计,UI设计是用了功力,主页功能和内容一览无余,方便用户选择,金字黑底,给予用户极好的奢华体验.原来听歌也是一种视觉享受.创新性源于对听歌氛围的把握,大幅的图片,刺激 ...

  7. sql server 2012 新知识-序列

    今天聊一聊sql 2012 上的新功能-----序列 按我的理解,它就是为了实现全局性的唯一标识,按sql server 以前的版本,想对一张表标识很简单,比如identity,但如果要对某几张有业务 ...

  8. JMeter参数化实现

     参数化:指对每次发起的请求,参数名称相同,参数值进行替换,如登录三次系统,每次用不同的用户名和密码. 1.1.1. 从csv文件读取(CSV Data Set Config) 步骤: 1)新建一个文 ...

  9. 视觉SLAM的方案总结

    MoNoSLAM:https://github.com/hanmekim/SceneLib2 以扩展卡尔曼滤波为后端,追踪前端非常稀疏的特征点,以相机的当前状态和所有路标点为状态量,更新其均值和协方差 ...

  10. MarkDown的用法

    # 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六级标题# 无序标题- 文本- 文本- 文本# 有序标题1. 文本2. 文本3. 文本# 图片链接[张驰博 ...