Vue锚点定位

article/2025/8/23 19:15:35

VUE锚点定位

//   点击此处<div @click="goDingyue">立即订阅</div>

绑定事件

methods: {goDingyue() {// 获取元素在页面中的位置console.log(this.$refs.dingyue_box_ref.getBoundingClientRect());// document//   .getElementById("agentTitle")//   .scrollIntoView({ block: "start", behavior: "smooth" });// 跳转到指定位置并且平滑滚动this.$el.querySelector(".dingyue_box").scrollIntoView({ block: "start", behavior: "smooth" });},
}
<div class="dingyue_box" ref="dingyue_box_ref">立即订阅内容</div>

 

然后获取页面位置等等

理解:getBoundingClientRect用于获取某个元素相对于视窗的位置集合。集合中有top, right, bottom, left等属性。

2.返回值类型:

 rectObject.top:元素上边到视窗上边的距离;

rectObject.right:元素右边到视窗左边的距离;

rectObject.bottom:元素下边到视窗上边的距离;

rectObject.left:元素左边到视窗左边的距离;

scrollIntoView是一个与页面(容器)滚动相关的API(官方解释),该API只有boolean类型的参数能得到良好的支持(firefox 36+都支持),所以在这里只讨论参数Boolean类型的情况。

调用方法为 element.scrollIntoView() 参数默认为true。

参数为true时调用该函数,页面(或容器)发生滚动,使element的顶部与视图(容器)顶部对齐;

参数为false时,使element的底部与视图(容器)底部对齐。

TIPS:页面(容器)可滚动时才有用!

document.getElementById("view").scrollIntoView();

 

 

 

二 锚点定位的介绍:

锚点其实就是可以让页面定位到某个位置上的点。在高度较高的页面中经常见到。

// 锚点跳转有两种形式:// *1. a标签 + name / href 属性// *2. 使用标签的id属性//2.1 第一种锚点定位的方法:<a href="#box1">我跳到box1</a><a href="#" name="#box2">我跳到box2</a><div id="box1"></div><div id="box2"></div>
// 2.2 第二种锚点定位的方法://JQuery的写法<script>$('a').on('click',function(e){//阻止a标签的默认行为跳转,这样就不会把#判断符带入到url中e = e || window.event;e.preventDefault();// 获取id号,得到是#box1var target = $(this).prop('hash');//将页面滚动到对应的位置$('html,body').scrollTop($(target).offset().top);});
</script>//原生写法:
<script>var aList = document.querySelectorAll('a');//给每一个a标签注册点击事件for( var i=0;i < aList.length;i++){aList[i].addEventListener('click', function(e){//阻止a标签的默认行为e = e || window.event;e.preventDefault();//获取整个href路径//var target = this.href;//获取#片段识别符var target = this.hash;//获取box参照于body定位的top值var offsetTop = document.querySelector(target).offsetTop;//将页面跳转到对应的位置document.documentElement.scrollTop = offsetTop;	});}
</script>

注意点:

**1. 这种方法url不会发生改变,因为我们阻止了a标签的默认行为.所以a标签不会跳转.

**2. document.querySelector(target).offsetTop;

$(target).offset().top 都是去求出盒子参照body定位对应的top值,这是因为offet家族的定义是:

如果元素自身是非固定定位,并且所有的父元素都没有定位,那么他的定位父级是body .

**3. 上面代码的target得到格式都是#box1,此时在原生中利用属性选择器来获取元素要很多.

 

 

document.querySelector(target) 等价于
document.querySelector('#box1')

2.3 第三种锚点定位的方法:

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

 


<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<style>ul {height: 200px;overflow-y: scroll;position: relative;}li {height: 30px;line-height: 30px;}
</style><body><ul><li>111</li><li>112</li><li>113</li><li>114</li><li>151</li><li>114541</li><li>11451</li><li>141411</li><li>11453411</li><li>112811</li><li>1124231</li><li>11446491</li><li>1233</li><li>111231231</li><li>11145645</li></ul>
</body>
<script>(function () {var li = document.querySelectorAll("li");var ul = document.querySelector("ul");var height =parseInt( getComputedStyle(document.querySelector("ul")).height );li.forEach(item => {item.onclick = function () {// this.style = "color:red"// 用自带的方法  但是如果父亲和爷爷都有滚动条的话,都会动// this.scrollIntoView(false)/* 1. scrollTop 小于0是不动的2. li 的offsetTop 是以dom 中的为准,是不会变的,通过滚动到试图中间只是视觉上变了,所以如果scollTop 等于  的offsetTop 就到最上面了3. top-height/2 所以说当到了中间的时候才会动*/let top=this.offsetTop;console.log('top',top);ul.scrollTop=top-height/2;}})})()
</script></html>

例子:Bootstrap框架: 模拟小风车科技官网_风铭大师的博客-CSDN博客

<template><div><div class="div"><ul class="navgator"><li class="navgatorLi" :class="{'isActive': index===navgatorIndex}" @click="handleLeft(index)" v-for="(item,index) in navgator" :key="item">{{item}}</li></ul><ul class="rightList"><li :id="'id'+index" v-for="(item,index) in listBox" :key="item">{{item}}</li></ul></div></div>
</template><script>export default {data() {return {navgator: ['列表A','列表B','列表C','列表D',],navgatorIndex: 0,listBox: ['A','B','C','D'],listBoxState: true,//点击导航栏时,暂时停止监听页面滚动};},created() {},mounted() {let timeId;window.addEventListener('scroll', () => {// 页面滚动停止100毫秒后才会执行下面的函数。clearTimeout(timeId);timeId = setTimeout(() => {this.scrollToTop();console.log('执行完成');}, 100);} , true);},methods: {// 点击导航菜单,页面滚动到指定位置handleLeft(index) {this.navgatorIndex = index;this.$el.querySelector(`#id${index}`).scrollIntoView({behavior: "smooth",  // 平滑过渡block:    "start"  // 上边框与视窗顶部平齐。默认值});this.listBoxState=false;let timeId;clearTimeout(timeId);timeId = setTimeout(() => {this.listBoxState=true;},200);},// 监听页面元素滚动,改变导航栏选中scrollToTop() {// 获取视窗高度var domHight = document.body.offsetHeight;console.log(domHight)// dom滚动位置var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;if (this.listBoxState) {//作用是点击导航栏时,延迟这里执行。this.listBox.map((v,i) => {// 获取监听元素距离视窗顶部距离// var offsetTop = document.getElementById(`id${i}`).offsetTop;// 获取监听元素本身高度var scrollHeight = document.getElementById(`id${i}`).scrollHeight;// 如果 dom滚动位置 >= 元素距离视窗距离 && dom滚动位置 <= 元素距离视窗距离+元素本身高度// 则表示页面已经滚动到可视区了。if (scrollTop >= offsetTop && scrollTop<=(offsetTop+scrollHeight)) {// 导航栏背景色选中this.navgatorIndex = i;}})}},},
}
</script><style scoped>.div {width: 100%;background: #ededed;}.navgator {width: 200px;position: fixed;top: 0;}.navgator .navgatorLi {width: 100%;height: 1rem;display: flex;justify-content: center;align-items: center;border: 1px solid #ccc;border-top: none;}.navgator .isActive {color: #fff;background: darkseagreen;}.rightList {width: 560px;margin-left : 200px;}.rightList li {width: 100%;height: 10rem;display: flex;justify-content: center;align-items: center;border: 1px solid #ccc;}
</style>


http://chatgpt.dhexx.cn/article/dsyamxbj.shtml

相关文章

jquery锚点定位

jquery实现锚点定位功能 这里主要是通过jquery实现了一个简单的滚动触发锚点高亮&#xff0c;以及点击锚点触发滚动的功能 $leftnav为左侧楼层导航栏(left-nav)&#xff0c;右侧right-content-body为滚动区域。主要是利用了scrollTo()和对滚动区域scroll事件的监听实现锚点定位…

锚点定位

1. 例如我们在做一个很长的网页时&#xff0c;需要在页面内做一个导航&#xff0c;点击导航里的链接不是新开一个窗口或者跳转到其他网址&#xff0c;而是跳转到当前页的某一个位置。那么所要跳转到的那个位置&#xff0c;我们就叫做锚点&#xff0c;它是一种在页面内部定位的…

uniapp锚点定位

uniapp 锚点定位 需求&#xff1a;在 uniapp 写 App 时&#xff0c;根据后端接口返回的数据渲染图文&#xff0c;并且要对图片进行锚点定位。 前提&#xff1a;后端要给每张图片一个单独的参数&#xff0c;用来区分每张图片。 思路&#xff1a;前端将这个特定参数注入到图片标…

如何设置锚点居页面顶部距离

锚点是网页制作中超级链接的一种,又叫命名锚记。命名锚记像一个迅速定位器一样是一种页面内的超级链接,运用相当普遍。 使用命名锚记可以在文档中设置标记,这些标记通常放在文档的特定主题处或顶部。然后可以创建到这些命名锚记的链接,这些链接可快速将访问者带到指定位…

锚点定位的三种解决方法

因为在项目中遇到锚点定位的问题&#xff0c;觉得有必要单独成文&#xff0c;来介绍锚点定位的解决办法。 一 学习锚点定位之前的知识储备: 1.1 #号的作用 #代表网页中的一个位置。其右面的字符&#xff0c;就是该位置的标识符。比如&#xff0c;http://www.example.com/ind…

什么是 cookie? 会话 cookie 与持久性 cookie 之间 有何区别?

转载&#xff1a; https://www.cisco.com/c/en/us/products/collateral/security/web-security-appliance/cn/117925-technote-csc-00.html 有 2 种不同类型的 cookie&#xff1a;会话 cookie 和持久性 cookie 简介 本文将介绍什么是 HTTP cookie&#xff0c;以及会话 cookie …

数据持久化

数据持久化 企业数据架构存储技术存储架构 企业数据架构 持久化&#xff08;Persistence&#xff09;&#xff0c;即把数据&#xff08;如内存中的对象&#xff09;保存到可永久保存的存储设备中&#xff0c;如磁盘等。 数据按存储类型可以分为缓存数据库、关系型数据库、NoSQ…

事务四大特征:原子性,一致性,隔离性和持久性。

事务四大特征&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性和持久性。 1、原子性&#xff08;Atomicity&#xff09; 一个原子事务要么完整执行&#xff0c;要么干脆不执行。这意味着&#xff0c;工作单元中的每项任务都必须正确执行。如果有任一任务执行失败&…

MySQL事务原子性、一致性和持久性以及回滚是如何实现的?

前言 《MySQL事务详解》一文中详细讲解了事务的概念&#xff0c;包括ACID特性&#xff0c;事务并发引起的问题&#xff0c;事务的四种隔离级别。 在事务的四种特性中&#xff0c;原子性、一致性、持久性通过数据库的redo log和undo log来完成&#xff0c;redo log称为重做日志&…

InnoDB引擎--事务持久性

事务是指构成单一逻辑工作单元的操作的集合。数据库系统维护事务的ACID四个特性: 原子性:事务的所有操作在数据库中要么全部反映,要么全部不反映。一致性:事务执行前后数据库保持约束一致性和业务逻辑一致性。隔离性:在事务并发执行时,各个事务都感觉不到其他事务的存在。…

MySQL 是如何保证一致性、原子性和持久性的!

编辑&#xff1a;业余草 来源&#xff1a;https://www.xttblog.com/?p4891 今天&#xff0c;我们来简单的看一下 MySQL 的一致性、原子性和持久性问题。后面还扩展了 15 个简单的面试题&#xff0c;希望大家喜欢&#xff01; 1、Mysql怎么保证一致性的&#xff1f; OK&#xf…

MySQL InnoDB 存储引擎写入磁盘(落盘)的原理\MySQL怎么保证持久性、原子性?(MySQL中是如何实现事务提交和回滚的)\隔离性

文章目录 一、MySQL InnoDB 存储引擎写入磁盘&#xff08;落盘&#xff09;的原理一条 update 语句在写入磁盘的过程为什么必须有“两阶段提交”呢&#xff1f; binlog 的写入机制 二、MySQL怎么保证持久性、原子性?(MySQL中是如何实现事务提交和回滚的)redo log(重做日志) 如…

MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)

日志的重要性 日志绝对是数据库的核心. 持久化的日志记录了各种重要的信息.数据的恢复需要依赖日志。 慢查询sql语句需要用到慢查询日志。以及错误日志中保存着mysqld数据库服务端在启动过程中发生的重大错误信息... 数据库重要组成 本质上来说是一个文件系统 (两大重要组…

MySQL究竟是如何做到持久性的?

前言 我们学习事务中&#xff0c;对于持久性&#xff08;durability&#xff09;是这样定义的&#xff1a;事务一旦提交&#xff0c;则其所有的修改将会保存到数据库当做。即使此时系统崩溃&#xff0c;修改的数据也不会丢失。同时数据库连接中&#xff0c;默认有一个参数auto…

理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)

事务是指对系统进行的一组操作&#xff0c;为了保证系统的完整性&#xff0c;事务需要具有ACID特性&#xff0c;具体如下&#xff1a; 1. 原子性&#xff08;Atomic&#xff09; 原子性是指事务是一个不可分割的工作单位&#xff0c;事务中的操作要么都发生&#xff0c;要么都…

持久性连接和非持久性连接

HTTP连接有两种,一种为持久性连接;另一种为非持久性连接。 由于不同的HTTP版本,使用不同的方式。 在这里分析一下二者的区别: 一、非持久性连接(Nonpersistent HTTP) 特点:每个TCP连接最多允许传输一个对象 HTTP 1.0使用的非持久性连接 过程: 响应时间分析与建…

mysql事务如何保证持久性_详解MySQL事务持久性实现

所谓MySQL事务持久性就是事务一旦提交,就是永久性的,不会因为宕机等故障导致数据丢失(外力影响不保证,比如磁盘损害)。持久性是保证了MySQL数据库的高可靠性(High Reliability),而不是高可用性(Hign Availability)。 MySQL的innoDB存储引擎,使用Redo log保证了事务的持久性…

Mysql持久性的实现

1、持久性的定义 事务一旦提交&#xff0c;则其所有的修改将会保存到数据库当中。即使此时系统崩溃&#xff0c;修改的数据也不会丢失。同时数据库连接中&#xff0c;默认有一个参数autocommit1&#xff08;如果想要关掉&#xff0c;要set autocommit0,然后要手动的开启关闭&a…

数据库事务-持久性原理

持久性&#xff08;Durability&#xff09;: 事务处理结束后&#xff0c;对数据的修改就是永久的&#xff0c;即便系统故障也不会丢失。&#xff08;持久性由redo log日志来保证&#xff09; 以一个跟新语句执行流为例&#xff1a; 在存储引擎执行时&#xff0c;会先在缓存池…

MYSQL 1251

今天折腾mysql&#xff0c;&#xff0c;一直在连接的时候出现1251的报错&#xff0c;然后百度了很多方法&#xff0c;都没有办法成功&#xff0c;&#xff0c;最后折腾了好久&#xff0c;&#xff0c;终于成功了&#xff0c;进入MySQL 8.0 Command Line Clien&#xff0c;依次输…