h5之新增的historyAPI介绍

功能介绍

history的HTML5 API可以更改当前页面的url但是不刷新页面,同时将路径记录到历史页面中,可通过浏览器后退按钮来返回到上一状态。这样可以轻松帮我们实现在ajax动态局部刷新页面后,通过后退按钮来回来前一状态,而保证页面不跳转。

API

1、存储当前历史记录点 window.history.pushState(stateObj, title, url)

三个参数:

  • stateObj——一个与指定网址相关的状态对象,popstate事件触发时,该对象会传入回调函数。如果不需要这个对象,此处可以填null。

  • title——新页面的标题,但是所有浏览器目前都忽略这个值,因此这里可以填null。

  • url:新的网址,必须与当前页面处在同一个域,将存入历史记录中,当前页面url也变成这个。

2、替换当前历史记录点 window.history.replaceState(stateObj, title, url)

  • 参数意义与上面相同

3、popstate事件

  • 监听历史记录点,当history.go()或者浏览器后退前进时触发。
//实例展示

//绑定事件

if (history.pushState) {

window.addEventListener("popstate", function() {

fnHashTrigger();

});

}

//将当前url放进历史记录堆栈中

$('.bar_wrap a').click(function(event) {

var $this = $(this);

var query = $this.data('state');

if (history.pushState && query){

history.pushState(null, "", location.href.split("?")[0] + "?" + query);

}

});

//改变当前url的历史记录

var eleMenus = $('.bar_wrap a');//触发url变化的按钮

var fnHashTrigger = function(target) {

var query = location.href.split("?")[1], eleTarget = target || null;//query获取到url中'?'后面的部分

if (typeof query == "undefined") { 如果没有查询字符,(如http://tx.163.com/m/index.html)则使用第一个导航元素的查询字符内容

if (eleTarget = eleMenus.eq(0)) {

history.replaceState(null, "", location.href + "?" + eleTarget.data('state'));

fnHashTrigger(eleTarget);

}

} else {

eleMenus.each(function() {

if (eleTarget === null && $(this).data('state') === query) {

eleTarget = $(this);

}

});

if (!eleTarget) { // 如果查询序列没有对应的导航菜单,去除查询然后执行回调

history.replaceState(null, "", location.href.split("?")[0]);

fnHashTrigger();

} else {

$(eleTarget).trigger("click");

}

}

};
### Vue.js 结合 HTML5 的使用方法 Vue.js 是一种渐进式的前端框架,专注于构建用户界面。而 HTML5 则是一种标记语言,用于定义网页的内容和结构。两者的结合可以显著提升开发效率并改善用户体验。 #### 1. **Vue.js 提供的指令与 HTML5 功能** Vue.js 提供了许多内置指令,这些指令可以直接操作 DOM 并增强 HTML5 的功能。例如 `v-model` 可以轻松绑定输入框到数据模型上,从而简化表单处理逻辑[^1]。 ```html <input v-model="message" placeholder="请输入内容"> <p>您输入的是: {{ message }}</p> ``` 这种双向绑定的方式使得开发者无需手动监听事件或更新 DOM,极大地提高了开发效率。 --- #### 2. **HTML5 特性与 Vue.js 的无缝集成** Vue.js 不仅支持传统的 HTML 元素,还能够很好地兼容 HTML5 新增的功能,比如地理定位、拖放 API 和媒体播放器等。通过 Vue.js 组件化的开发方式,可以更方便地封装复杂的交互逻辑。 以下是一个简单的例子,展示如何在 Vue.js 中调用 HTML5 地理位置 API: ```javascript new Vue({ el: '#app', data() { return { latitude: '', longitude: '' }; }, methods: { getLocation() { navigator.geolocation.getCurrentPosition(position => { this.latitude = position.coords.latitude; this.longitude = position.coords.longitude; }); } } }); ``` ```html <div id="app"> <button @click="getLocation">获取当前位置</button> <p>纬度: {{ latitude }}, 经度: {{ longitude }}</p> </div> ``` --- ### Vue.js 与 H5 的区别对比 尽管 Vue.js 和 HTML5 都属于 Web 开发领域的重要组成部分,但它们的作用范围和技术特点存在明显差异: | 对比维度 | Vue.js | HTML5 | |----------------|-------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| | 定义 | 前端 JavaScript 框架,主要用于构建动态用户界面 | 标记语言,用来描述网页的结构和内容 | | 主要用途 | 数据驱动视图层,适合 SPA(单页应用)开发 | 构建静态页面以及提供多媒体、离线存储等功能 | | 学习曲线 | 较高,需要掌握 JavaScript 和 MVVM 概念 | 较低,只需熟悉基本语法即可 | | 性能优化 | 支持虚拟 DOM,减少直接操作真实 DOM 的开销 | 直接依赖浏览器渲染性能 | 此外,在实际项目中,Vue.js 更倾向于解决复杂业务场景下的状态管理和组件复用问题;而 HTML5 则更多关注于底层技术支持,如文件上传接口、画布绘制能力等。 --- ### Vue.js 阻止 H5 页面刷新的方法 当涉及到路由跳转或者历史记录管理时,可能会遇到不必要的页面重载现象。此时可以通过 Vue Router 来控制导航行为,并利用其钩子函数拦截默认动作[^3]。下面是一段示例代码演示如何防止页面刷新的同时加载新内容: ```javascript const router = new VueRouter({ mode: 'history', // 启用 HTML5 History Mode routes: [...] }); router.beforeEach((to, from, next) => { if (window.confirm('离开当前页面?')) { next(); // 允许继续访问目标地址 } else { next(false); // 取消本次导航请求 } }); ``` 上述配置会弹出确认对话框询问用户是否真的想切换页面,如果取消则不会触发刷新效果。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值