一个页面绑定多个onscroll事件

默认一个页面只能同时存在一个window.onscroll函数。有的时候我们会引入工具的js框架,在框架中使用onscroll统一监听每个页面,但是在某个页面,我们可能还要使用onscroll来监控滚动条,完成具体某个业务逻辑,这是该怎么做呢?

方法1:只适用有两个滚动事件共存时适用,当有多个的时候不推荐使用这个方法,有多个会被覆盖

window.onscroll=function(){ //默认一个页面只能同时存在一个window.onscroll函数
    console.log(11);
}
var oldMethod = window.onscroll;   //当使用多个时建议使用这个方法或下面的方法
if(typeof oldMethod == 'function'){
    window.onscroll = function(){
        oldMethod.call(this);
        console.log(22);
    }

}

方法2:

function addEvent(obj,type,fn){
    if(obj.attachEvent){ //ie
        obj.attachEvent('on'+type,function(){
            fn.call(obj);
        })
    }else{
        obj.addEventListener(type,fn,false);
    }
}
addEvent(window,'scroll',function(){
    console.log(21)
});
addEvent(window,'scroll',function(){
    console.log(22)
});

方法3:jQuery已经帮我们写好了一切

$(window).scroll(()=>{console.log(31)})

$(window).scroll(()=>{console.log(32)})

对于同一元素,绑定多个事件,生效问题总结如下:

1)使用onclick方式,只能最后一个事件生效;

2)使用jquery、或者addEventListener,可以使多个事件生效;

<!doctype html>
<html>
<head>
<title>throttle测试</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>


<script type="text/javascript">


$(document).ready(function(){
	//一般情况下,如果给一个dom对象绑定同一个事件,只有最后一个会生效
	document.getElementById('clickme').onclick = function (e) {
		console.log("123");
	};
	document.getElementById('clickme').onclick = function (e) {
	  console.log("234");
	};
	
	//使用addEventListener/attachEvent绑定,可以是多个事件顺序生效
	document.getElementById('clickme').addEventListener('click',function (e) {
		console.log("123");
	});
	document.getElementById('clickme').addEventListener('click',function (e) {
		console.log("321");
	});
	
	//使用jquery绑定,可以是多个事件顺序生效
	$("#clickme").click(function() {
		console.log(111);
	});
	$("#clickme").click(function() {
		console.log(222);
	});

});
</script>
</head>
<body>

<div id="clickme">CLICK ME</div>

</body>

</html>

 

要实现一个上拉加载的功能,你可以考虑使用以下步骤: 1. 布局页面:在页面中添加一个滚动条,用于监听用户滚动事件。在滚动条下方添加一个列表,用于展示数据。 2. 绑定滚动事件:使用JavaScript绑定滚动条的滚动事件,当用户滚动到底部时触发加载更多数据的函数。 3. 加载数据:在加载更多数据的函数中,向后端发送请求,获取更多数据并添加到列表中。可以使用Ajax技术实现异步加载数据。 以下是一个基本的示例代码: ``` // HTML <div id="scroll-container"> <ul id="list"> <!-- 初始数据 --> </ul> </div> // CSS #scroll-container { height: 500px; // 滚动容器高度 overflow-y: scroll; // 显示滚动条 } // JavaScript var page = 1; // 当前页数 var isLoading = false; // 是否正在加载数据 // 监听滚动事件 document.getElementById('scroll-container').onscroll = function() { var container = this; var scrollTop = container.scrollTop; var scrollHeight = container.scrollHeight; var windowHeight = container.clientHeight; // 滚动到底部时加载更多数据 if (scrollTop + windowHeight >= scrollHeight && !isLoading) { isLoading = true; loadMoreData(); } }; // 加载更多数据 function loadMoreData() { // 向后端发送请求,获取更多数据 // ... // 渲染数据列表 // ... isLoading = false; page++; } ``` 在实际开发中,你还需要考虑以下问题: 1. 如何判断是否还有更多数据需要加载? 2. 如何优化性能,避免无限滚动? 3. 如何处理加载失败或加载超时的情况? 希望这些提示能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值