【转】mip-semi-fixed 走走又停停

写在前面

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

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

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

相关文章

【转】百度站长平台MIP引入工具使用心得

MIP引入主动推送流程 对于 MIP 站点改造好了,我们如何提交数据,并且 MIP 提交后,我们能得到哪些数据的反馈,在这里简单的写一篇文章,说一下。 改造 MIP,我们一般是添加了一个二级域名站点进行改造&#x…

Hadoop之HDFS应用

1、通过http://127.0.0.1:8088/即可查看集群所有节点状态: 2、访问http://localhost:9870/即可查看文件管理页面(在3.0.0中在之前的版本中文件管理的端口是50070,替换为了9870端口): ————进入文件系统 ————…

MIP ACCESS细节剖析

什么是 MIP ACCESS MIP ACCESS 由百度 MIP 团队开发的一种页面访问权限控制机制,能够允许网页发布者在页面元素中定义内容标记,并结合用户访问情况进行综合评价,从而展现或隐藏页面中内容,直至用户登录、订阅或付费后才能够查看隐…

Linux环境下Flume的安装

1、在官网http://flume.apache.org/download.html下载flume的压缩包 2、解压到指定位置并重命名 tar -zxvf apache-flume-1.9.0-bin.tar.gz3、配置环境并生效 #vi ~/.bashrc export FLUME_HOME/usr/local/APP/flume export PATH$PATH:$FLUME_HOME/bin #使变量设置生效 #sour…

MIPCache 域名升级

一、MIPCache URL 是什么 举个例子,MIP 官网的 URL 为: https://www.mipengine.org 对应的 MIPCache 的 URL 为: https://mipcache.bdstatic.com/c/s/www.mipengine.org 所谓 MIPCache URL 是经过 MIP-Cache CDN 缓存后的 MIP 页面地址&…

Flume监听端口,输出端口数据案例

1、在flume目录下新建/myconf目录,并在目录下新建socket-console.conf 文件! mkdir myconf cd myconf touch socket-console.conf2、编辑文件vim socket-console.conf,添加以下内容: # 定义这个agent中各组件的名字 a1.sources r1 a1.sink…

MIP 移动网页加速器视频教程全新发布

MIP (Mobile Instant Pages - 移动网页加速器) 是百度推出的开源项目,用于移动端页面加速。MIP 技术通过优化浏览器资源加载,前端代码执行及 CDN 缓存加速来加速页面,打造秒开的页面浏览体验。目前,有 5000 多家站点的 MIP 页已经…

MIP 技术进展月报:储存功能全新上线,MIP-Cache域名升级,校验更严谨

集 * 瞬时触达用户、高转化率、炫酷闪电标、优质展现形式 * 等诸多特性为一体的 MIP 页面吸引了众多站点进行改造。为了更好地服务于广大站长,更快地倾听站长们的声音,MIP 技术团队特推出《MIP 技术进展月报》,欢迎大家对 MIP 技术提建议&…

WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享

作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题。而 WebP 技术的出现,为解决该问题提供了好的方案。本文将为大家详细介绍 WebP …

MIP技术进展月报第2期: 数据绑定,异步脚本加速

一、 功能更新 1. mip-bind 上线,实现复杂交互 MIP bind 双向绑定机制和组件上线,提供双向绑定的特性;能够允许页面实现数据驱动功能,开发者可以在任意场景修改数据,并驱动页面元素变动。 MIP 小姐姐画外音&#xf…

Hadoop的安装与配置——搭建完全分布式集群

一、搭建集群 1、准备服务器(这里以我的3台Centos7为例) 1个主节点:Carlota1(192.168.33.21),2个子节点:Carlota2(192.168.33.22),Carlota3(192.168.33.23) 2、配置主节点名 在主节点命令行输入&#x…

HTTP 视频怎么在 MIP 页面中使用?

在 MIP 中,一些资源的使用需要支持 HTTPS,视频就是其中一种。但目前大部分站点的视频资源都还是 HTTP 的资源,无法在百度 MIP 搜索结果中直接使用, mip-video 视频组件针对 HTTP 的视频资源采用跳到一个 HTTP 的播放页面进行播放&…

MIP 技术月报(4月):支持熊掌号登录;优化页面悬浮元素

之前由MIP团队维护的《移动 Web 加速技术月报》从本期开始,正式升级为《MIP 技术月报》,与以往不同的是,《MIP 技术月报》将会与大家分享包含移动加速技术以外的其他移动应用开发的技术,从移动用户体验、开发体验出发来分享 MIP 的…

2017 到 2018,PWA 技术到底经历了什么

高磊 OpenWeb开发者 1周前 在 GMTC 2018 全球大前端会议举办期间,高磊担任主题演讲嘉宾,并担任 PWA 专场出品人。作为有近 10 年 Web 前端技术开发、管理经验的开发者,高磊一直关注着 PWA 技术的发展。 2017年 6月10日,GMTC 201…

CentrOS7静默安装oracle11g

最近要做一个用ogg实现oracle到kafka的增量数据实时同步,但是Oracle就让我装了好久,这里来记录一下安装oracle过程。 1.建立swap分区 创建充当swap分区的文件,文件大小就是要增加的swap大小,of是文件位置,bs为单位&a…

MIP 网站中熊掌号登录

标题内容类型通用支持布局responsive,fixed-height,fill,container,fixed所需脚本https://c.mipcdn.com/static/v1/mip-mustache/mip-mustache.js https://c.mipcdn.com/static/v1/mip-login-xzh/mip-login-xzh.js 注意&#xff1a;使用该组件必须在引用本组件链接前引用 <…

MIP 支付组件,支付流程:

MIP 支付组件&#xff0c;支付流程&#xff1a; 标题内容类型通用支持布局responsive,fixed-height,fill,container,fixed所需脚本https://c.mipcdn.com/static/v1/mip-simple-pay/mip-simple-pay.js,https://c.mipcdn.com/static/v1/mip-login-xzh/mip-login-xzh.js 注意&…

jar包在Hadoop集群上测试(MapReduce)

本片使用MapReduce——统计输出给定的文本文档每一个单词出现的总次数的案例进行&#xff0c;jar包在集群上测试 1、添加打包插件依赖 <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.6.2</versio…

什么是集群(cluster)

1、集群 1.1 什么是集群 简单的说&#xff0c;集群(cluster)就是一组计算机&#xff0c;它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是&#xff0c;用户从来不会意识到集群系统底层的节点&#xff0c;在他/她们看来&am…

JDK源码解析之 Java.lang.Double

Double类是原始类型double的包装类&#xff0c;它包含若干有效处理double值的方法&#xff0c;如将其转换为字符串表示形式&#xff0c;反之亦然。Double类的对象可以包含一个double值。 Double类包装原始类型的值 double中的对象。类型的对象 Double包含一个类型为的字段 doub…