开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1333|回复: 0
收起左侧

[技术分享] css3中粘性定位

[复制链接]
发表于 2021-9-30 11:02:47 | 显示全部楼层 |阅读模式   广东省揭阳市
本帖最后由 曼妙佳人 于 2021-9-30 11:05 编辑

前言
项目中,往往会遇到类似这样的需求:网页的导航栏一开始距离浏览器顶部100px,当页面向上滑动后,导航栏跟随页面向上滑动,页面滑动了100px时,导航栏则固定到页面的顶部,脱离文档流。这种情况,我们往往会想到使用position:fixed以及配合js监听页面顶部距离浏览器顶部的距离,而实际上有个比较方便的css样式可以很快的满足此需求:position:sticky。
简介
position: sticky; 粘性定位,基于用户的滚动位置来定位。
粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。
它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。
元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。
这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

position:sticky是相对包含position样式的祖先定位的,而position:fixed是相对于浏览器窗口定位的。




此属性在部分安卓手机滑动会出现轻微抖动情况,所以得根据情况做适当的兼容处理,处理方式使用fixed,但是位置又不是固定的,而是滑动到具体位置才触发

<view :class="isTop?'isTop':''" id="newtop">
我是滚动到指定位置,悬浮在窗口上的元素
</view>

在data里面定义两个参数
topNums //元素距离顶部的位置
isTop=false //通过控制
  1. const query = uni.createSelectorQuery().in(this);
  2.     query.select('#newtop').boundingClientRect(data => {
  3.            console.log("得到布局位置信息" + JSON.stringify(data));
  4.            console.log("节点离页面顶部的距离为" + data.top);
  5.            this.topNums = data.top;
  6. }).exec();
复制代码

通过uniapp 提供的滚动方式
  1. onPageScroll(e) {
  2. if (e.scrollTop >= topNums ) {
  3.        this.isTop = true;
  4.     } else {
  5.         this.isTop = false;
  6.     }
复制代码
样式
  1. &.isTop {
  2.       position: fixed;
  3.       top: 0;
  4.       width: 100%;
  5. }
复制代码







您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表