Vue实现左侧菜单锚点、右侧滑动

<template>

  <div class="editBox">

    <el-tabs v-model="activeName" type="card" tab-position="left" @tab-click="handleTabClick">

      <el-tab-pane v-for="tab in tabs" :key="tab.name" :name="tab.name">

        <span slot="label">{{ tab.label }}</span>

      </el-tab-pane>

    </el-tabs>

    <div class="edit-cards">

      <div v-for="tab in tabs" :key="tab.name" :id="tab.name"

        :class="['edit-card', tab.color, { active: activeName === tab.name }]">

        {{ tab.label }}

      </div>

    </div>

  </div>

</template>

<script>

export default {

  data() {

    return {

      activeName: 'first', // 当前激活的标签名

      tabs: [

        { name: 'first', label: '用户管理', color: 'edit-red' },

        { name: 'second', label: '配置管理', color: 'edit-orange' },

        { name: 'third', label: '角色管理', color: 'edit-yellow' },

        { name: 'fourth', label: '定时任务补偿', color: 'edit-green' },

      ],

    };

  },

  mounted() {

    this.bindScrollEvent();

  },

  methods: {

    bindScrollEvent() {

      const editCards = document.querySelector('.edit-cards');

      const tabHeights = this.tabs.map(tab => {

        const card = document.getElementById(tab.name);

        return {

          tabName: tab.name,

          offsetTop: card.offsetTop,

        };

      });

      editCards.addEventListener('scroll', () => {

        const scrollPosition = editCards.scrollTop;

        tabHeights.forEach((item, index) => {

          if (index === tabHeights.length - 1) {

            if (scrollPosition + 200 >= item.offsetTop) { // 200 是一个偏移量,可以根据实际需要调整

              this.activeName = item.tabName;

            }

            return;

          }

          if (scrollPosition >= item.offsetTop &&

            scrollPosition < tabHeights[index + 1].offsetTop - 200) { // 200 是一个偏移量,可以根据实际需要调整

            this.activeName = item.tabName;

          }

        });

      });

    },

    scrollToTabContent(tabName) {

      const contentElement = document.getElementById(tabName);

      if (contentElement) {

        contentElement.scrollIntoView({ behavior: 'smooth', block: 'start' });

      }

    },

    handleTabClick(tab) {

      this.activeName = tab.name;

      this.scrollToTabContent(tab.name);

    },

  },

};

</script>

<style scoped>

.editBox {

  width: 100%;

  display: flex;

}

.edit-cards {

  height: 80vh;

  overflow-y: scroll;

}

.edit-card {

  width: 500px;

  font-size: 30px;

  padding: 20px;

}

.edit-red {

  height: 800px;

  background-color: red;

}

.edit-orange {

  height: 500px;

  background-color: orange;

}

.edit-yellow {

  height: 700px;

  background-color: yellow;

}

.edit-green {

  height: 400px;

  background-color: green;

}

</style>

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题涉及到网页设计,我可以回答。通常情况下,左侧菜单和右边内容可以通过CSS的布局来实现。可以使用float属性将左侧菜单浮动到左侧,然后使用margin或padding属性来控制右侧内容的位置。另外,也可以使用flexbox或grid布局来实现更复杂的布局效果。具体实现方式可以根据具体需求来选择。 ### 回答2: HTML(Hypertext Markup Language)是一种用于构建网页的标记语言。在HTML中,可以通过使用元素和属性来创建网页的结构和内容。左侧菜单和右边内容是一种常见的网页布局。 对于左侧菜单,可以使用HTML中的无序列表(`<ul>`)和列表项(`<li>`)来创建。在列表项中,可以放置菜单选项的链接(`<a>`),并使用CSS样式来设置菜单的外观和交互效果。同时,可以为列表和列表项添加类名或ID,以便使用CSS或JavaScript对其进行定制和操作。 右边的内容区域可以使用HTML的块级元素(如`<div>`)来创建。可以在`<div>`中放置文本、图片、视频等内容,并使用CSS样式来设置内容的布局和样式。同时,可以为内容区域的`<div>`添加类名或ID,以便通过CSS或JavaScript进行样式和交互的定制。 在网页布局中,可以使用CSS的浮动(float)属性来实现菜单和内容区域的并列布局。将左侧菜单的`<ul>`设置为浮动,并将右侧内容区域的`<div>`设置为`float: none;`,即可让它们在同一行显示。 需要注意的是,在进行网页布局时,应将可访问性(accessibility)和响应式设计(responsive design)考虑在内。确保菜单和内容区域在不同屏幕尺寸和设备上都能良好显示和交互。可以使用CSS媒体查询(media queries)和JavaScript等技术来实现响应式设计。 总之,使用HTML可以很容易地创建一个带有左侧菜单和右边内容的网页布局。通过合理设置HTML元素和属性,并结合CSS样式和JavaScript交互,可以实现想要的外观和功能。 ### 回答3: HTML左侧菜单和右边内容是网页布局中常见的设计方式之一。左侧菜单通常用来展示网页的导航栏,包含各种链接和按钮,方便用户快速访问网站的不同页面或功能。右边内容区域则是用来展示具体的页面内容,如文字、图片、视频等。 在HTML中,可以使用无序列表(ul)和有序列表(ol)标签来创建左侧菜单。每个菜单项可以用列表项(li)标签来表示,并添加相应的链接(a)标签。通过CSS样式可以对菜单进行美化,如设置背景颜色、字体样式和大小等。 右边内容区域可以使用块级元素或内联元素来展示具体内容。块级元素会单独占据一行空间,常见的块级元素有段落(p)标签、标题(h1-h6)标签等。内联元素则会与其他元素在同一行显示,如文字(span)标签、图片(img)标签等。 为了实现左侧菜单和右边内容的布局,可以使用CSS中的浮动(float)属性或者弹性布局(flexbox)来对元素进行定位和排列。通过设置菜单的宽度和右边内容的margin等属性,可以实现两者并排显示,并保持良好的布局效果。 最后,为了提升用户体验,左侧菜单可以设计成可以折叠或展开的样式,以适应不同屏幕尺寸的显示需求,如在手机端时可以收起菜单以节省空间。同时,菜单的选中状态可以通过CSS样式或JavaScript代码来实现,以提示用户当前所在的页面或功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值