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

献上第二个小点心: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. 巧用CAS解决数据一致性问题

    缘起:在高并发的分布式环境下,对于数据的查询与修改容易引发一致性问题,本文将分享一种非常简单但有效的优化方法. 一.业务场景 业务场景为,购买商品的过程要对余额进行查询与修改,大致的业务流程如下: ( ...

  2. springboot swagger-ui结合

    随着移动互联的发展,前后端的分离已经是趋势.前后端已不是传统部门的划分,而是它们各有一套的生态系统,包括不同的开发语言.不同的开发流程.构建方式.测试流程等.做前端的不需要会maven作为构建工具,后 ...

  3. 串String(2):串的实现(堆分配存储表示法)

    7/27/2017,先占个位,最近事情比较忙,明天敲一波代码,预测在一星期内搞定 9/02/2017,看到这个十分汗颜,八月去美帝学习了,没有抽空补上这一博文,计划这个月开了数据结构课后补上

  4. PDO绑定含IN的SQL语句的参数注意事项

    PDOStatement::bindParam(),表示将PDO::prepare()语句中的占位符用参数替换掉.注意,在绑定含有IN的SQL多参数语句时要额外小心,比如$stmt = $db-> ...

  5. PHP中public,private,protected,abstract等关键字用法详解

    PHP中常用的关键字 在PHP中包含了很多对函数和类进行限制的关键字,常用的通常有abstract,final,interface,public,protected,private,static等等, ...

  6. nginx取结构体地址

    linux内核提供了一个container_of()宏,可以根据结构体某个成员的地址找到父结构的地址. #define container_of(ptr, type, member) ({ \ con ...

  7. Java之线程安全中的三种同步方式

    一个程序在运行起来时,会转换为进程,通常含有多个线程. 通常情况下,一个进程中的比较耗时的操作(如长循环.文件上传下载.网络资源获取等),往往会采用多线程来解决. 比如,现实生活中,银行取钱问题.火车 ...

  8. xamarin Android activity生命周期详解

    学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...

  9. ArcGIS API for JavaScript 4.2学习笔记[6] goTo()地图动画

    这是个很有意思的例子,不过例子给的比较复杂,需要查很多API,我会在文章最后给出关键的类和属性解释. 同样发现一个很有意思的事儿:博客园似乎有爬虫,我4号发布的blogs,5号就在百度和google搜 ...

  10. 转载|chrome developer tool—— 断点调试篇

    断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析.也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时 ...