html页面通过id在页面内跳转,HTML跳转到页面指定位置的几种方法

前言

有时候,我们想阅读页面中某段精彩的内容,但由于页面太长,用户需要自己滚动页面,查找起来非常麻烦 😭,很容易让人失去继续往下阅读的兴趣。这样体验非常不好,所以我们可以想办法 💡 实现点击某段文字或者图片跳转到页面指定位置,方便用户的阅读。

一、 纯 html 实现

1. 利用 id 为标记的锚点

这里作为锚点的标签可以是任意元素。

跳转到 id 为 aa 标记的锚点

-------------分隔线-------------

a

2. 利用 a 标签的 name 属性作为锚点

这里作为锚点的标签只能是 a 标签。

跳转到 name 为 bb 的 a 标签锚点

-------------分隔线-------------

name 为 bb 的 a 标签的锚点

bbb

注意:当以 ' a 标签 name 属性作为锚点 ' 和 ' 利用 id 为标记的锚点 ' 同时出现(即以 name 为锚点和以 id 为锚点名字相同时),会将后者作为锚点。

二、 js 实现

1. 利用 scrollTo()

window.scrollTo 滚动到文档中的某个坐标。可提供滑动效果,想具体了解 scrollTo() 可以看看 MDN 中的介绍。

话不多说,看下面代码👇

「html 部分」:

平滑滚动到 c

-------------分隔线-------------

c

「js 部分」:

var linkc = document.querySelector('#linkc')

var cc = document.querySelector('#cc')

function to(toEl) {

// toEl 为指定跳转到该位置的DOM节点

let bridge = toEl;

let body = document.body;

let height = 0;

// 计算该 DOM 节点到 body 顶部距离

do {

height += bridge.offsetTop;

bridge = bridge.offsetParent;

} while (bridge !== body)

// 滚动到指定位置

window.scrollTo({

top: height,

behavior: 'smooth'

})

}

linkc.addEventListener('click', function () {

to(cc)

});

2. 利用 scrollIntoView()

Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内。想具体了解 scrollIntoView() 可以看看 MDN 中的介绍。

下面也直接上代码👇

「html 部分」:

利用 scrollIntoView 跳转到 d

-------------分隔线-------------

ddd

「js 部分」:

var dd = document.querySelector('#dd')

function goTo(){

dd.scrollIntoView()

}

注意:此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

下面为了方便看效果,把上面的代码整理在一起。

Document

div {

width: 600px;

height: 300px;

background-color: pink;

}

跳转到以 id 为 aa 标记的锚点 a

-------------分隔线-------------

hhh

aa

跳转到 name 为 bb 的 a 标签锚点

-------------分隔线-------------

name 为 bb 的 a 标签的锚点

-------------分隔线-------------

bb

平滑滚动到 c

-------------分隔线-------------

cc

利用 scrollIntoView 跳转到 d

-------------分隔线-------------

dd

-------------分隔线-------------

var cc = document.querySelector('#cc')

var linkc = document.querySelector('#linkc')

function to(toEl) {

//ele为指定跳转到该位置的DOM节点

let bridge = toEl;

let body = document.body;

let height = 0;

do {

height += bridge.offsetTop;

bridge = bridge.offsetParent;

} while (bridge !== body)

console.log(height)

window.scrollTo({

top: height,

behavior: 'smooth'

})

}

linkc.addEventListener('click', function () {

to(cc)

});

var dd = document.querySelector('#dd')

function goTo(){

dd.scrollIntoView()

}

效果图:

7a1968c7772e2acf261a80e2fc3b4355.png

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序页面跳转传递值的几种方法如下: 1. 使用wx.navigateTo和wx.navigateBack函数的url参数传递值 在源页面使用wx.navigateTo函数跳转到目标页面时,可以在url参数中携带需要传递的值。例如: ``` wx.navigateTo({ url: '/pages/target/target?id=123&name=test' }) ``` 在目标页面的onLoad函数中可以获取这些值: ``` onLoad: function(options) { console.log(options.id) // 输出123 console.log(options.name) // 输出test } ``` 如果要在目标页面中修改这些值并返回到源页面,则可以使用wx.navigateBack函数的delta参数和wx.getCurrentPages函数获取源页面实例对象,然后调用实例对象的setData方法更新源页面数据。例如: 在目标页面中修改值并返回: ``` wx.navigateBack({ delta: 1, success: function(res) { let pages = getCurrentPages() let prevPage = pages[pages.length - 2] prevPage.setData({ id: 456, name: 'update' }) } }) ``` 2. 使用全局变量传递值 在app.js中定义一个全局变量,在需要传递值的页面中修改该变量的值,并在需要获取该值的页面中使用getApp函数获取app实例对象来获取该变量的值。例如: 在app.js中定义全局变量: ``` App({ globalData: { id: '', name: '' } }) ``` 在需要传递值的页面中修改该变量的值: ``` let app = getApp() app.globalData.id = 123 app.globalData.name = 'test' ``` 在需要获取该值的页面中获取该变量的值: ``` let app = getApp() console.log(app.globalData.id) // 输出123 console.log(app.globalData.name) // 输出test ``` 3. 使用本地存储传递值 在源页面中使用wx.setStorageSync函数将需要传递的值存储到本地存储中,在目标页面中使用wx.getStorageSync函数获取该值,并在需要修改该值并返回到源页面时使用wx.setStorageSync函数更新该值。例如: 在源页面中存储需要传递的值: ``` wx.setStorageSync('id', 123) wx.setStorageSync('name', 'test') ``` 在目标页面中获取该值: ``` let id = wx.getStorageSync('id') let name = wx.getStorageSync('name') console.log(id) // 输出123 console.log(name) // 输出test ``` 在目标页面中修改该值并返回: ``` wx.navigateBack({ delta: 1, success: function(res) { wx.setStorageSync('id', 456) wx.setStorageSync('name', 'update') } }) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值