h5-history解析


这是一个不太常用的api,但有一些场景比较适用,比如说,某用户填写了一个很复杂的表单,点了一下回退,就回退了一个网页,那用户的填写的所有信息都没了,那么,history就可以派上用场了
我们来看一下这个实例把

	<input type="text" id="search"/>
	<button id="btn"></button> 
	<div id="main"></div>
	var oInput = document.getElementById("search");
	//造假数据
	var data = [{
            name: "html"
        },
        {
            name: 'css'
        },
        {
            name: 'js'
        },
        {
            name: 'panda'
        },
        {
            name: 'monkey'
        }
    ];
	function search(){
		var inpValue = oInput.value;
		var res = data.filter(function(ele){
			if(ele.name.indexOf(inpValue) > -1){
				return ele;
			}
		})
		//做兼容性处理,如果输入框为空展示所有列表
		if(inpValue == ""){
			res = data;
		}
		history.pushState({inpVal:inpValue}, null, "#" + inpValue);
		render(res);
	}

	function render(renderData){
		var content = '';
		for(var i = 0; i < renderData.length; i++){
			content += "<div>" + renderData[i].name + "</div>";
		}
		document.getElementById("main").innerHTML = content;
	}
	window.addEventListener("popState", function(e){
		oInput.value = e.state.inpVal;
		//这里不能直接调用Search方法,因为调用会push进state中
		var res = data.filter(function(ele){
			if(ele.name.indexOf(oInput.value) > -1){
				return ele;
			}
		})
		if(oInput.value== ""){
			res = data;
		}
		render(res);
	})

上述代码可以达到前进后退效果,如果有同学代码贴过去报错,可以评论,会修复

这里还需要补充一个方法。监听锚点的变化

	window.addEventListener("hashchange", function(e){
		//此方法锚点,或者hash发生改变的时候,触发的方法
	})

popState和hashchagne方法比较

  • popState是url发生改变时触发,并且执行顺序上,popState优先于hashchange
  • hashchange只有在锚点发生变化时候才能触发,如果,url没有设置锚点,则监测不到。
  • 综上所述,popState更加常用,一些复杂场景需要配合使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值