js自定义实现类似锚点(内容部分滚动)

news2024/11/16 23:44:17

场景: 

效果图如上,类似锚点,但是屏幕不滚动。高度计算我不是很熟练。for循环写的比较麻烦。element plus 和Ant Design有类似组件效果。

html: 
<template>
    <div>
        <div style="height: 400px;" class="header">
        </div>
        <div class="contain">
            <div class="left">
                <button @click="oneClick(0)">111</button><button @click="oneClick(1)">222</button><button
                    @click="oneClick(2)">333</button><button @click="oneClick(3)">444</button><button
                    @click="oneClick(4)">555</button>
            </div>
            <div class="right">
                <div class="one item">100px</div>
                <div class="two item">200px</div>
                <div class="three item">300px</div>
                <div class="four item">400px</div>
                <div class="five item">500px</div>

            </div>
        </div>
        <div class="footer">

        </div>
    </div>
</template>
css:
<style>
.header {
    z-index: 999;
    position: relative;
    background: red;
}

.footer {
    background: yellow;
    height: 400px;
}

.contain {
    width: 80vw;
    position: relative;
    display: flex;
}

.left {
    width: 200px;
    height: 300px;
    background: rgb(102, 214, 180);

}

.right {
    /* position: absolute; */
    left: 200px;
}

.one {
    background: rgb(96, 96, 177);
    width: 400px;
    height: 100px;
    position: relative;
    z-index: 99;
    transition: all 0.3s ease;
}

.two {
    background: rgb(218, 96, 207);
    height: 200px;
    transition: all 0.3s ease;
}

.three {
    background: royalblue;
    height: 300px;
    transition: all 0.3s ease;
}

.four {
    background: rgb(31, 151, 27);
    height: 400px;
    transition: all 0.3s ease;
}

.five {
    background: rgb(233, 94, 52);
    height: 500px;
    transition: all 0.3s ease;
}
</style>
js:
<script>
export default {
    data() {
        return {
            height: 0,//需要偏移的高度
            nowIndex: 0,//现在选的index
            choosePre: 0,//上一次选的index
            goHeight: 0,//向上时已经滚动的高度
            containHeight: 0, //中间contain的高度
        }
    },
    methods: {
        oneClick(nowIndex) {
            let contain = document.getElementsByClassName('contain')[0]
            let items = document.getElementsByClassName('item');
            this.containHeight = 0
            //之前选的4 现在选的2
            for (let i = nowIndex; i < items.length; i++) {
                this.containHeight += items[i].offsetHeight
            }
            contain.style.height = this.containHeight + 'px'
            if (this.choosePre > nowIndex) {
                this.goHeight = 0
                for (let i = nowIndex; i < this.choosePre; i++) {
                    this.goHeight += items[i].offsetHeight
                }
                this.height = Number(this.height) - Number(this.goHeight)
                for (let i = 0; i < items.length; i++) {
                    if (nowIndex == 0) {
                        items[i].style.transform = `translateY(0px)`;
                    } else {
                        items[i].style.transform = `translateY(-${this.height}px)`;
                    }
                }
                this.choosePre = nowIndex
            }
            //之前选的2 现在选的3
            else if (this.choosePre < nowIndex) {
                this.height = 0
                for (let i = 0; i < nowIndex; i++) {
                    this.height += items[i].offsetHeight
                }
                this.choosePre = nowIndex
                for (let i = 0; i < items.length; i++) {
                    if (nowIndex == 0) {
                        items[i].style.transform = `translateY(0px)`;
                    } else {
                        items[i].style.transform = `translateY(-${this.height}px)`;
                    }
                }
            }
        }
    }
}
</script>
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1656272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新手如何便捷使用HTTP代理

便捷地使用HTTP代理主要涉及到设置和使用两个步骤。下面是在不同环境和使用场景下如何设置和使用HTTP代理的详细介绍: 1.浏览器设置: 打开浏览器的设置菜单&#xff0c;找到网络设置或代理设置的选项。在代理设置中&#xff0c;填写代理服务器的地址和端口号。不同的浏览器设…

Springboot+vue项目影城管理系统

摘 要 本论文主要论述了如何使用JAVA语言开发一个影城管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述影城管理系统的当前背景以及系统开发的目的&…

vue3+ant design实现表格数据导出Excel

提示:实现表格数据导出Excel 文章目录 前言 一、安装ant design? 二、引用ant design 1.搭建框架 2.获取表格数据 三、封装导出表格的代码 四、导出 1.获取导出地址 2.在下载导出事件中添加导出代码 五、全部代码 前言 今天终于有时间来更新文章了,最近公司项目比较紧…

图:广度优先遍历(BFS)和深度优先遍历(DFS)

1.工具类&#xff1a;队列和字典 export class DictionNary {// 字典的封装constructor() {this.items {}}set(key, value) {// 添加键this.items[key] value}has(key){// 判断键是否存在return this.items.hasOwnProperty(key)}get(key){// 获取键的valuereturn this.has(k…

民航电子数据库:数据库的备份与恢复

目录 前言备份库级逻辑备份示例 恢复库级的逻辑恢复示例 前言 民航电子数据库的备份与恢复 备份 库级逻辑备份 备份目标库下所有的对象 。 因此 &#xff0c;库级逻辑备份需要由备份库的管理员&#xff08;SYSDBA&#xff09;登录至备份目标库进行操作。 语法格式 &#xff1…

粤港澳青少年信息学创新大赛 Python 编程竞赛(初中部分知识点整理)

一、考试大纲梳理 知识内容 知识目标 计算机基础与编程环境&#xff0c;历史&#xff0c;存储与网络变量定义和使用基本数据类型&#xff08;整型&#xff0c;浮点型&#xff0c;字符型&#xff0c;布尔型&#xff09;&#xff0c;数据类型的转换控制语句结构&#xff08;顺序…

微服务架构与Spring Cloud

1 微服务架构 1.1 微服务架构概述 微服务架构&#xff08;Microservice Architecture, MSA&#xff09;是一种新型的服务端架构设计方案&#xff0c;通过将应用程序拆分成多个小型、自治的服务&#xff0c;实现了服务的松耦合和快速迭代。 微服务架构特征主要包括以下几个方面…

✯ ✯ ✯ 绍兴ISO27001认证:信息安全新征程✯ ✯ ✯

&#x1f308;&#x1f308;绍兴ISO27001认证&#xff1a;&#x1f353;信息安全新征程&#x1f4af; &#x1f604;大家好&#xff01;今天&#xff0c;&#x1f601;我无比激动地想要和大家分享&#x1f352;一个关于我们⭐绍兴的大新闻&#xff01;&#x1f389;&#x1f38…

Oracle-一次TX行锁堵塞事件

问题背景&#xff1a; 接用户问题报障&#xff0c;应用服务出现大量会话堆积现象&#xff0c;数据库锁堵塞严重&#xff0c;需要协助进行问题定位和排除。 问题分析&#xff1a; 登录到数据库服务器上&#xff0c;首先查看一下数据库当前的等待事件情况&#xff0c;通过gv$ses…

AI一键换装超强电商生产力工具下载

支持win版本&#xff0c;对电脑硬件有一定的要求。建议固态硬盘留足至少30 G的空间&#xff0c;显卡n卡显存至少4G。一些低端独立显卡可能还不如高配cpu集成。 程序文件比较大&#xff0c;因为涉及到大型模型。 下载链接在后面 下载链接&#xff1a; https://pan.baidu.com…

应聘项目经理,软考证书会是一个加分项吗?

加分项是必需的&#xff0c;特别是IT行业的项目经理职位。您可以在各大招聘网站上搜索项目经理职位&#xff0c;前景好、薪资高、待遇好的项目经理岗位&#xff0c;基本上都有证书的要求。非IT行业项目经理&#xff0c;可以考虑PMP证书或者其他与专业相关的证书&#xff0c;比如…

elementUI表格table文字不换行

在对应不需要换行的列加上属性&#xff1a;:show-overflow-tooltip"true" 即可

uniapp——列表分享当前话题(一个页面多个分享)

案例 分享的时候弹出对应的标题和默认第一张图片 代码 <view v-for"(item,index) in list" :key"index"><button open-type"share" :id"index" click.stop"()>{}"><image src"/static/images/cir…

马化腾用“不负众望”,来评价视为“全村希望”的视频号

我是王路飞。 2023年的视频号&#xff0c;给了腾讯足够的惊喜。 去年一年&#xff0c;视频号电商GMV实现近3倍增长&#xff08;约为1200亿&#xff5e;1500亿&#xff09;。2023年三季度&#xff0c;视频号总播放量同比增长超50%&#xff1b; 2023年视频号供给数量同比增长超…

上班不想用脑子写代码了怎么办?那就试试Baidu Comate啊宝贝

本文目录 前言1、视频编程实战1.1、熟悉代码库中的代码1.2、参考现有代码编写新代码 2、下载使用教程3、使用体验3.1、AutoWork 产品测评3.2、解决有关ajax请求后重定向问题3.3、询问编程相关知识3.3.1、cookie和session的区别与联系3.3.2、数据库中主键外键的相关知识 4、问题…

卡牌——蓝桥杯十三届2022国赛大学B组真题

样例输入 4 5 1 2 3 4 5 5 5 5样例输出 3样例说明 这 5 张空白牌中,拿2张写1,拿1张写2,这样每种牌的牌数就变为了3,3,3,4, 可以凑出 3套牌,剩下2张空白牌不能再帮助小明凑出一套。 评测用例规模与约定 对于30%的数据&#xff0c;保证n ⩽ \leqslant ⩽ 2000; 对于100%的数据…

区块链中的加密算法及其作用

区块链技术以其去中心化、不可篡改、透明公开的特性&#xff0c;在全球范围内引发了广泛的关注和讨论。其中&#xff0c;加密算法作为区块链技术的核心组成部分&#xff0c;对于维护区块链网络的安全、确保数据的完整性和真实性起到了至关重要的作用。本文将详细介绍区块链中常…

手写SpringBoot核心功能流程

本文通过手写模拟实现一个简易版的Spring Boot 程序&#xff0c;让大家能以非常简单的方式知道Spring Boot大概的工作流程。 工程依赖 创建maven工程&#xff0c;并创建两个module springboot模块&#xff1a;手写模拟springboot框架的源码实现 test模块&#xff1a;业务系统…

【刷题篇】双指针(二)

文章目录 1、有效三角形的个数2、查找总价格为目标值的两个商品3、三数之和4、四数之和 1、有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 class Solution { public:int triangleNumber(vector<int>& n…

《MySQL对数据库中表的结构的操作》

文章目录 一、建表二、查看表结构所有能查看到数据库&#xff0c;表的操作痕迹的本质都是服务器保存下来了这些操作记录。 三、修改表1.改表名字2.添加表记录3.添加表的更多字段4.修改表的字段5. 删除表的字段 四、修改表的数据1.删除表的数据2.修改表的数据3.向表中添加数据 总…