为了良好的用户体验,需要在容器顶部可滚动的情况下增加一个阴影条,提示用户可向上滚动;如果容器顶部不可滚动,则不显示阴影条,效果如下图所示:
首先我们定义好dom和相应的样式:
12345678910111213141516
//给容器设置最大高度,使其产生滚动.container{max-height:200px;overflow-y:auto;border:1pxsolidblack;position:relative;}//利用sticky定位实现吸顶效果.shadow{position:sticky;visibility:hidden;top:0;left:0;right:0;box-shadow:010px010pxrgba(0,0,0,0.2);//如果不希望阴影挡住下方内容的点击事件的话pointer-events:none;}
核心的实现便是如何判断容器顶部是否还有滚动空间,我们用到属性,如果scrollTop大于0,说明可以向上滚动:
import{debounce}from'https://cdn.jsdelivr.net/npm/lodash-es@4.17.21/lodash.min.js';//容器constcontainer=document.querySelector('.container');//阴影constshadow=document.querySelector('.shadow');//用到了lodash的防抖函数,//通过scrollTop是否大于0来判断容器顶部是否还有滚动空间,//从而控制shadow是否显示。consthandler=debounce((e)=>{if(e.target.scrollTop>0){shadow.style.visibility='visible';}else{shadow.style.visibility='hidden'}},50,{leading:true});//监听滚动事件container.addEventListener('scroll',handler);
然后就实现了开头的滚动阴影效果。
会了顶部阴影,那怎么实现底部、左侧、右侧阴影呢?聪明的你肯定脱口而出用scrollBottom、scrollLeft、scrollRight比较一下就行了。行吗?不太行哦,元素没有scrollBottom、
scrollRight属性,因此底部和右侧阴影不能用这个方法实现。那么应该怎么搞呢,也简单,用到元素的scrollWidth和scrollHeight就可以实现scrollBottom和scrollRight的效果:
constscrollRight=scrollWidth-scrollLeft;constscrollBottom=scrollHeight-scrollTop;//然后再使用前文的逻辑处理即可......//但是这里还有个坑,//上述的scrollBottom和scrollRight是通过浮点数相减来的,//会有精度问题,因此比较时不是直接与0比较,而是用Number.EPSILON//举个栗子scrollRight>Number.EPSILON
其实不止滚动阴影,还有一些效果也是可以用这个思路做的,比如下图中的指示器效果:
写篇小水文,混混经验。我发现长篇的干货数据不太好,反而是这样几分钟看完的小水文数据还挺好看的。虽然水,但是也有不少知识点:
到此这篇关于使用CSS实现一个滚动阴影效果的文章就介绍到这了,更多相关CSS滚动阴影内容请搜索巴适教程以前的文章或继续浏览下面的相关文章,希望大家以后多多支持巴适教程!
Copyright @ 2021 巴适自动秒收录 此内容系本站根据来路自动抓取的结果,不代表本站赞成被显示网站的内容或立场。 蜀ICP备15001851号
本页阅读量次 | 本站总访问次 | 本站总访客人 | 今日总访问次 | 今日总访客人 | 昨日总访问次 | 昨日总访客人 | 网站地图
巴适自动秒收录于2010年7月建站,现已经稳定运行
技术支持:巴适自动秒收录