写在前面

MIP 中悬浮元素的特殊情况

其实组件上线已经有一段时间了,最开始看到这个需求是站长提交了一个这中功能的组件过来,不过看过代码立刻就想到了 MIP 页面的特殊性:从结果页打开的 MIP 页面,是嵌套在一个 iframe 之中的。

在这种特殊的情况下,单纯的通过 position: fixed 去实现 DOM 元素的悬浮存在一系列的问题。比如,在 ios 的 safari 浏览器中,当用户滑动页面的时候,页面中的悬浮元素会随着页面的滑动而闪烁。

因此,MIP 提供了 mip-fixed 悬浮布局组件来解决这些问题。

滑动悬浮的使用场景

顾名思义就是一个 DOM 节点在滑动的一定位置的时候,变为悬浮状态。滑动悬浮的使用场景还是很多的,比如一些页面中的导航,当导航滑动到页面顶部的时候则悬浮在页面顶部,以方便用户操作。如:


业界技术实现与存在的问题

业界技术实现

目前业内针对这种滚动页面定位的情况一般使用两种逻辑来写:

(1)将悬浮前后的两个状态分成两个 dom 节点(暂时叫做 staticDOM 和 fixedDOM),并通过 JavaScript 控制两个 dom 节点的显示和隐藏。在页面到达悬浮状态之前:staticDOM 节点显示,fixedDOM 节点隐藏;到达悬浮状态之后:staticDOM 节点隐藏,fixedDOM 节点显示。

  • 优点:JavaScript 逻辑简单
  • 缺点:html 代码冗余

(2)只需要一个 dom 节点(暂时叫做 stickyDOM),所有的逻辑都通过 JavaScript 控制,也就是说,页面到达悬浮状态的时候,将 stickyDOM 的 CSS 样式中的 position 属性的值设置为 fixed, 非悬浮状态的时候,将 stickyDOM 的 CSS 样式中的 position 属性设置为 static。

  • 优点:html 代码清晰
  • 缺点:由于每个页面之间的特性,比较难达到通用性

(3)通过 CSS3 的 position: sticky 实现。这是 CSS3 的新特性,不过目前还不能达到很好的兼容状态,特别是我们这种在 iframe 内的特殊情况。关于 sticky 可以参考文档 position:sticky实现iOS6+下的粘性布局

仍然存在的问题

在 ios 下的 uc、百度和手百浏览器中,无论采用哪种方法,由于浏览器原因,页面滑动的时候,所有的 JavaScript 都无法实时计算并执行。因此,只有当页面滑动停止后,JavaScript 才能去计算页面的位置,然后处理悬浮元素的状态,这样就会看到悬浮元素状态的变化有卡顿的情况,对此,目前并没有十分好的解决办法,如果大家有更好的办法,可以反馈我们。

简介

mip-semi-fixed 是滑动悬浮组件,也可以叫做半悬浮组件,命名为 semi-fixed 的灵感来源于半导体(介于导体(conductor)与绝缘体(insulator)之间)。

代码设计融合了业界两种实现方案,非 SF 下 MIP 页面中通过 JavaScript 更换 CSS 实现,iframe下的 MIP 页面由于要特殊处理 fixed 元素,所以会克隆一个 dom 节点,具体代码参考 mip-semi-fixed 开源代码。

属性及节点

  • threshold 属性(非必选项)

    元素 fixed 状态时距离页面顶部的距离,默认是 0。

  • fixedClassNames 属性(非必选项)

    元素 fixed 状态时需要添加的类,如果没有这个属性,则 组件只会悬浮不会改变样式。

  • div[mip-semi-fixed-container] 子节点(必选项)

    需要滑动后悬浮的 html 代码的容器,组件科隆的也是这个节点。

MIP 官网文档 mip-semi-fixed 滑动悬浮组件 中对组件各个参数的说明、使用以及默认值等进行了详细的说明。

使用

  • 常规使用

    • 代码:传送门
    • 示例:传送门
  • 加关闭按钮

    • 代码:传送门
    • 示例:传送门

写在后面

有任何问题可以到 github issues 提问。

文章作者:Pearl
转发自segmentfault

【转】mip-semi-fixed 走走又停停相关推荐

  1. 久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋

    久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋 [原文] 五劳所伤:久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋,是谓五劳所伤.(<黄帝内经·素问·宣明五气篇>)   [译文] 五劳 ...

  2. 伤感日志:寂静的夜,寂寞的心

    伤感日志:寂静的夜,寂寞的心 - 伤感日志:寂静的夜,寂寞的心 没有月亮的夜,秋风今夜寒,不知在你酒醉后的梦里,是否会有我时常流泪的低唱.寂寞时我忍不住的尖叫,发泄内心的迷茫,落幕时依旧能够看到你深情 ...

  3. 周立波语录 壹周立波经典搞笑语录

    1虽然你身上喷了古龙水,但我还是能隐约闻到一股人渣味儿.--  周立波语录 2我又不是人民币,怎么能让人人都喜欢我?! 3令人不能自拔的,除了牙齿还有爱情.--  周立波语录 4上帝从不埋怨人类的愚蠢 ...

  4. 今天只有残留的躯壳,风雨中抱紧自由

    今天只有残留的躯壳,风雨中抱紧自由 真的,也许我是属于那种理想型的人,我愿意为了自己的理想去奋斗,去追求,不管实现 它有多么困难.人们都说,为了自己的理想去奋斗是幸福的.是的,我也觉得自己是幸福 的. ...

  5. PHP正则匹配ABAB格式的词:叠词(重复连续出现的词)

    一.不多说.直接上代码 二.打印(查看源代码) 一.不多说.直接上代码 说明:\x{4e00}-\x{9fa5} 为汉字的范围. 把正则中的第一个 1 改成 2:注意区别. //叠词(重复连续出现的词 ...

  6. 12种新大傻 这是周立波总结的? 超级人才

    12种新大傻: 1.默默奉献等提拔的: 2.没有关系想高爬的: 3.身体有病不去查的: 4.经常加班不觉乏的: 5.什么破事都管辖的: 6.能退不退还挣扎的: 7.当众对头特肉麻的: 8.感情靠酒来表 ...

  7. 这些年走走停停,停停走走,我过的大概还好

    我喜欢比别人过的慢,慢一个拍子,我自以为这样我能过的比他们时间长:当然他们自以为他们比我过的时间长.好有意思啊,好难说清楚啊,好了,说这么多,你们自己托着下巴思考一下吧. 托着下巴的男孩 --灵遁者 ...

  8. 学会感恩,停停走走才能学有所思

    端午节学校放三天假,我待在宿舍,不知是哪来的念头,我开始了在51CTO技术博客中写下自己文章,目前主要关注于Java实现的设计模式方面.因为这一学期以来看过设计模式的好几本书,也互相比较了一番,愚蠢的 ...

  9. 2018年5月英语--停停走走

    前言   小编在这个月的英语学习中,似乎并没有花很多的时间,也没有每天都在学习,只是在坚持着每天在Aboboo中打卡,有时会听一听,旧美的音频,多少有些熟悉感,其他方面的学习,在下面的文字中,慢慢地总 ...

最新文章

  1. IT行业老程序员的经验之谈:爬虫学到什么程度可以找到工作?
  2. 编程实现WCF客户端调用
  3. sy-repid 和 sy-cprog的区别
  4. 【树链剖分】LCA(P4211)
  5. css 商城 两列_【云控基础】HTML+CSS基础入门
  6. php的添加语句怎么写,php修改语句怎么写
  7. Messari:自2019年,DeFi领域因黑客攻击损失超2.84亿美元资产
  8. React Native 系列(三) -- 项目结构介绍
  9. 6个用好大数据的秘诀
  10. iOS App 签名的原理 App 重签名(一)
  11. 图像特征提取现成的方法
  12. java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例
  13. JS生成随机字符,生成一堆高逼格的乱码。。。
  14. C语言学生管理系统(期末作业,超详细哟,拿走不谢!!!)
  15. C++续行符(反斜杠符号)
  16. fffffffffffffffffffffffffffffff
  17. debian 文件夹中文件大小_linux查看目录(文件夹)内容大小
  18. [docker] 解决 docker 部署访问提示 Empty reply from server,但是本地运行能够正常访问
  19. python 爬虫:下载小说
  20. 巨一自动化工业机器人_一文了解国内工业机器人系统集成商格局

热门文章

  1. ifix虚拟服务器,ifix的客户端和服务器
  2. Python map 函数 -Python零基础入门教程
  3. 服务器修改用户组权限设置,如何:修改用户的权限
  4. 计算机辅助设计还需要手绘吗,西安电脑如此发达为什么还要学习手绘
  5. 小皮面板有php环境吗,体验phpStudy小皮面板创建LAMP/LNMP系统和建站图文
  6. 软件测试技术qtp,51Testing独家连载:(四十一)精通QTP——自动化测试技术领航
  7. delphi listview 添加数据 慢_Delphi 二十四岁, Delphi 10.3.1 发布
  8. yui3 html属性,YUI Rich Editor + invalidHTML + style
  9. php ioc容器,PHP 在Swoole中使用双IoC容器实现无污染的依赖注入
  10. linux 关闭ext3日志,ssh – 可以在Linux(ext3)上减慢日志写入速度吗?