css应用粘性sticky布局实例
Admin 2021-04-26 群英技术资讯 2154 次浏览
新需求有个项目是要做问卷调查,其中必然会涉及到很多题目,以及一个题目下需要对多个人打分,手机端滑动的时候,就会发生这种现象,划上去会忘记了题目。 所以计算一定的距离之后需要对题头进行一个定位。使滑到相对于区域的题头一直固定在顶部,方便打分。
1.首先想到的是fixed布局就是题头到一定距离的时候就固定在屏幕的顶部。 (可以实现,但是过程不是很丝滑)
2.sticky布局,sticky就可以很好的实现这个需求,但是需要考虑到兼容性(兼容IE)
1.首先需要记录滑块的位置,需要监听滚动事件:
window.addEventListener("scroll", this.handleScroll);
记得组件销毁前去移出这个事件
beforeDestroyed() {
window.removeEventListener("scroll", this.handleScroll);
}
2.计算出每道题目的题头距离屏幕顶部的高度,并组成一个数组。
// 记得给每一条题目都设置ref,我的ref就是每道题的id
-- vue简略缩写---
<div
:ref="question.id"
v-for="(question, index) of formData.questions"
:key="index"
>
// 为防止乱序问题,我还进行了一个排序
---- js -----
this.topPositionArr = [];
for (let key in this.$refs) {
for (let idx in this.$refs[key]) {
this.topPositionArr.push(this.$refs[key][idx].offsetTop);
}
}
this.topPositionArr = [...new Set(this.topPositionArr)];
this.topPositionArrtopPositionArr = this.topPositionArr.sort(
(a, b) => {
return a - b;
}
);
3.滑动监听到的距离和获取到的题头进行一个比较,选择定位的题头。
// 兼容不同的游览器 不同游览器的offsetTop的取法是不一样的
handleScroll() {
this.scrollTop = document.documentElement.scrollTop
? document.documentElement.scrollTop
: document.body.scrollTop;
let scrollTop = this.scrollTop;
// 第一题的scrollTop不变,从第二题的scrollTop开始变
this.topPositionArr.forEach((item, idx) => {
if (idx > 1) {
this.scrollTop = scrollTop + 220;
}
//为什么这样做呢? 是因为iE不支持sticky布局,我们需要一个插件去协助使用
if (this.scrollTop > item) {
let elements = document.getElementById(`sticky${idx}`);
stickyfill.add(elements);
}
});
}
4.IE的兼容问题
因为IE是不支持sticky布局的,所以我们需要轮子 stickyfill
npm install stickyfill yarn add stickyfill
--- vue---
需要给题头的div标签一个动态的id,表示唯一性
<div
:id="`sticky${question.index}`"
class="isSticky"
>
单文件引入
在你需要的页面中引入:
<script src="path/to/stickyfill.min.js"></script>
var Stickyfill = require("stickyfill");
var stickyfill = Stickyfill();
js文件:
具体方法看上述3
let elements = document.getElementById(`sticky${idx}`);
stickyfill.add(elements);
以上就可以完美的实现哦~~~
PS:如果是只需要兼容谷歌,那就不需要这么麻烦,可以直接使用stiky布局,不再需要轮子 --


以上就是关于css sticky布局实现题目定位顶部的介绍,这样的设计能够提升用户的体验,大家可以了解一下,希望上述内容对大家学习有帮助。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在一次项目中,有一次要用到::selection伪元素,然后开发同学问我,CSS中一个冒号和两个冒号有神马区别?这好像真的是个问题,或许很多前端同学对此都有疑惑,查了些资料,证实了下两个符号的区别,简而言之:单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。W3C关于CSS3选择器的规范中有一段描述:Apseudo-elementismadeoftwocolons
这篇文章主要介绍了一些CSS的Checkbox复选框样式的代码分享,针对一些简单页面控件的设计,需要的朋友可以参考下Checkbox复选框是一个可能每一个网站都在使用的HTML元素,但大多数人并不给它们设置样式,所以在绝大多数网站它们看起来是一样的。为什么不把你的网站中的Checkbox设置一个与众不同的样式,甚至可以让它看起来一点也不像复选框。在本教程中,我们将创建5个不同的选择框,你可以
用H5怎样写一个简单的2048游戏?有不少朋友对此感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
这篇文章主要介绍了flex布局实现左侧文字溢出省略右侧文字自适应的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
1、表单标签<formaction="提交地址"method="提交方式"></form>表单边框标签:fieldset2、表单元素分为三类:(1)文本类型:文本框:text 属性有:disabled(不可操作)、readonly(只读)、placeholder(默认提示文字) 账号:<inputtype="text"&
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008