监听页面滚动事件

  不知大家在前端开发实践中有没有做过这样一个效果,就是页面布局中有一个顶部通栏的搜索登录框,我们的需求就是当鼠标向下滚动时,顶部通栏始终固定在顶部,并且默认顶部是透明背景,而当页面滚动时,顶部通栏的透明度随着页面卷曲的高度增加而变大,当页面滚动距离超过某一个高度时,透明度就固定不变了。顶部通栏的固定很好实现,只需要令其position属性值为fixed即可,顶部通栏的透明度则通过opacity属性来设置。比较容易出错的地方是这里需要监听页面滚动事件,得到实时的页面滚动距离,从而判断其距离的大小作出不同的响应。

  页面的滚动事件监听,可以通过一个js插件:iscroll来实现,该插件中的onscroll函数可以监听页面的滚动事件,而如何获取页面的滚动距离呢?最开始我使用的是document.body.scrollTop,但是发现无论如何获取的滚动距离都是零,如下图所示:

后来,我在《JavaScript高级程序设计》看到这样一段描述:“document.documentElement.clientWidth和document.documentElement.clientHeight中保存了页面视口的信息。在IE6中,这些属性必须在标准模式下才有效;如果是混杂模式,就必须通过document.body.clientWidth和document.body.clientHeight取得相同信息。”所以我改用document.documentElement.scrollTop后,成功获取到了页面的滚动距离。

最后,加上透明度变化,编写如下js代码:

window.onscroll = function () {     console.log(document.documentElement.scrollTop);     var scrollTop = document.documentElement.scrollTop;    /*1.默认的透明度*/    var opacity = 0;    if (scrollTop < height) {        /*2.当页面滚动的时候---随着页面卷曲的高度变大透明度变大*/        opacity = scrollTop / height * 0.85;    } else {        /*3.当页面滚动的时候---超过某一个高度的时候透明度不变*/        opacity = 0.85;    }    searchBox.style.background = ‘rgba(201,21,35,‘ + opacity + ‘)‘;}最终的效果如图所示:实现了顶部通栏固定且透明度随着页面滚动变化的效果。



原文地址:https://www.cnblogs.com/smalldy/p/10875654.html

时间: 2024-08-03 20:00:54

监听页面滚动事件的相关文章

react 监听页面滚动

html: // 如果使用typescript, 定义dom类型 private dom: HTMLDivElement | null // ReactJS中,对Div监听只需要绑定 onScrollCapture事件 <div style={{ flex: 1, height: '10000px', overflowY: 'scroll', overflowX: 'hidden', }} ref={dom => {this.dom = dom}} onScrollCapture={() =&

监听页面滚动及滚动到指定位置

两种监听页面滚动的方法 一.原生js通过window.onscroll监听window.onscroll = function() {//为了保证兼容性,这里取两个值,哪个有值取哪一个//scrollTop就是触发滚轮事件时滚轮的高度var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;console.log("滚动距离" + scrollTop);} 二.Jquery通过$(wind

ionic 监听页面滚动,点击停止滚动

类似今日头条,页面上有很多card,点击每个card跳转该card的详情页面.这里有一个问题,当我滚动页面时,会先后触发touchstart.touchmove.touchend,但是当touchend后,页面仍会因为惯性而继续滚动.这个时候,我想点击页面停止滚动,而不是跳转到某个card的详情页面. 原理很简单:设置一个状态,初始值为true,页面滚动时变为false,页面停止滚动,则恢复为true,只有这个值为true时,才能触发跳转事件,即进入card详情页面. 这里需要用到ionic的一

JQuery监听页面滚动总结

1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offset().top; 3.对页面滚动条滚动的监听:要放在页面加载的时候 $(window).scroll(function(event){ }); 4.设置滚动条到指定位置.$(window).scrollTop(offset).

导航栏监听页面滚动跟随 简单封装

slide('.wedding-title', '.expo-list', 'change','.nav'); //导航条 参数:导航栏父级, 被监听元素 , 导航改变样式,导航栏 function slide(navfather, tClass, activeClass,nav) { var $navfather = $(navfather), $nav = $(nav); $navfather.css({ "position": 'relative' }); var $navfat

JS监听页面滚动到底部事件

废话不说,直接上代码,放心我这个是最好的,直接放到js脚本里,直接生效: $(window).scroll(function(){ var scrollTop = $(this).scrollTop(); var scrollHeight = $(document).height(); var windowHeight = $(this).height(); if(scrollTop + windowHeight == scrollHeight){ clickMore(); } });

监听鼠标滚动事件,如滚动鼠标出现返回顶部按钮

JQuery方法: $(window).bind('scroll',function(){ // var len = $(this).scrollTop() if($('body').scrollTop() < 10){ $('#DiaLayer').hide(); } else { $('#DiaLayer').show(); }}) 原生代码: // scrollFlag = false时向下滚动出现导航条 var scrollFlag = false; window.onscroll =

Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向

很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷新和上拉加载更多.这个组件有个mode的属性,可以设置为both,即上下同时都可拉动.但是只设置这个属性的话,上拉与下拉产生的效果是完全一致的.所以要使用这个开源项目做到下拉刷新并同时可上拉加载更多,就需要在代码中进行一些处理. ==========================pulltoref

IOS之UI--自定义按钮实现代理监听点击事件

前言: Objective-C提供的按钮监听事件的方法是 不含参数的监听方法 [button实例对象 addTarget:self action:@selector(func) forControlEvents:UIControlEventTouchUpInside]; 含参数的监听方法 [button实例对象 addTarget:self action:@selector(func:) forControlEvents:UIControlEventTouchUpInside]; 下面通过代理的