Vue implements top left and right sliding navigation

Vue implements top left and right sliding navigation

Navigation and other things are often used in daily development, so write an article to record them. The navigation is implemented by clicking the end/beginning position, and the navigation automatically slides out the next item.

Idea: Determine the position of the current clicked item relative to the screen. If the clicked position meets the movable restrictions, perform automatic sliding processing.

The implementation is as follows:

vue

<template>
  <div class="debug-index-page">
    <div class="tab-layout" id="scroller">
      <ul v-for="(tab, idx) in tabList" :key="idx">
        <li
          :id="`tab-${tab.id}`"
          class="tab-item"
          @click="onClickTab(tab)"
          :style="`background:${tab.select ? 'red' : 'none'}`"
        >
          {{ tab.text }}
        </li>
      </ul>
    </div>
  </div>
</template>

JS

export default {

    data() {
        return {
            tabList: [],
        }
    },

    created() {
        let list = [
            "My Nobles",
            "Noble 1",
            "My Noble 2",
            "Noble 3",
            "Noble 4",
            "Noble 5",
            "My Noble 6",
            "My Noble 7",
        ];

        list.forEach((text, idx) => {
            this.tabList.push({
                text,
                id: idx, // tab identifier select: idx == 0, // whether it is selected index: idx // where it is displayed });
        });
    },

    computed: {
        curTab() {
            return this.tabList.find(v => v.select);
        }
    },

    methods: {

        onClickTab(tabInfo) {
            let curTab = this.curTab;
            if (curTab.id == tabInfo.id) return;
            let { index, id } = tabInfo;
            // Slide control let scroller = document.getElementById("scroller");
            let speed = scroller.scrollWidth / this.tabList.length;
            let tab = document.getElementById(`tab-${id}`);
            let bWidth = document.body.clientWidth;
            // Click on the right if (curTab.index < index && tab.clientWidth * index >= bWidth - speed) {
            // Sliding distance scroller.scrollLeft = (index + 2) * speed - bWidth;
            } else if (curTab.index > index && (tab.clientWidth * index - (scroller.scrollLeft + bWidth) < speed)) {
            // Sliding distance scroller.scrollLeft = (index - 1) * speed;
            }

            curTab.select = false;
            this.tabList[index].select = true;
        }
    }
}

less

.debug-index-page {
    width: 100%;
    overflow:hidden;


  .tab-layout {
    width: 100%;
    overflow-x: scroll;
    display: flex;

    .tab-item {
      width: 1rem;
      text-align: center;
    }
  }
}

The above is the navigation display.

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Vue implements tab navigation bar and supports left and right sliding function
  • Vue implements left and right sliding effect example code
  • Vue+swiper implements the test question function of sliding left and right
  • Vue uses swiper to switch pictures by sliding left and right
  • Vue uses better-scroll to achieve sliding and left-right linkage
  • Detailed explanation of left and right sliding events on Vue mobile terminal
  • Vue mobile terminal realizes the mobile phone sliding left and right entry animation
  • How to realize left and right sliding effect on mobile terminal in Vue
  • Implementing left and right sliding effect of page switching based on Vue
  • Detailed explanation of the use of Vue's left and right sliding button group component

<<:  How to upgrade CentOS7 to CentOS8 (detailed steps)

>>:  MySQL view introduction and basic operation tutorial

Recommend

How to query the minimum available id value in the Mysql table

Today, when I was looking at the laboratory proje...

TypeScript Enumeration Type

Table of contents 1. Overview 2. Digital Enumerat...

Some suggestions on Vue code readability

Table of contents 1. Make good use of components ...

Tutorial on logging into MySQL after installing Mysql 5.7.17

The installation of mysql-5.7.17 is introduced be...

How to use port 80 in Tomcat under Linux system

Application Scenario In many cases, we install so...

Nginx access control and parameter tuning methods

Nginx global variables There are many global vari...

Common naming rules for CSS classes and ids

Public name of the page: #wrapper - - The outer e...

Simple CSS text animation effect

Achieve results Implementation Code html <div ...

js to achieve the effect of dragging the slider

This article shares the specific code of how to d...

React uses emotion to write CSS code

Table of contents Introduction: Installation of e...

How to delete table data in MySQL

There are two ways to delete data in MySQL, one i...

Detailed explanation of as, question mark and exclamation mark in Typescript

1. The as keyword indicates an assertion In Types...

How to implement controllable dotted line with CSS

Preface Using css to generate dotted lines is a p...

Implementation of Nginx configuration of multi-port and multi-domain name access

To deploy multiple sites on a server, you need to...