Vue implements seamless scrolling of lists

Vue implements seamless scrolling of lists

This article example shares the specific code of vue to achieve seamless scrolling of the list for your reference. The specific content is as follows

HTML part code

<template>
  <div id="box" class="wrapper">
    <div class="contain" id="con1" ref="con1" :class="{anim:animate==true}">
      <List
        v-for="(item,index) in cloudList"
        :key="index"
        :listData="item"
        :index="index"
        :date="date"
      ></List>
    </div>
  </div>
</template>

List is a single list component and can also be replaced by li.

CSS part code

<style scoped>
.wrapper {
  width: 96vw;
  height: 90vh;
  position: absolute;
  left: 2vw;
  top: 1rem;
  overflow: hidden;
}
.contain > div:nth-child(2n) { //This style is required for my project and has nothing to do with seamless scrolling. Margin-left: 2vw can be ignored;
}
.anim {
  transition: all 0.5s;
  margin-top: -7vh;
}
</style>

My List component is set to float: left, so the div with id="con1" has no height

js part of the code

<script>
import List from './List';
export default {
  name: 'Contain',
  data () {
    return {
      cloudList: [], //Array used to store list data date: '', //Latest data update date animate: false,
      time: 3000, //Timed scrolling interval setTimeout1: null,
      setInterval1: null
    };
  },
  components:
    List
  },
  methods: {
    // Get json data and update date getCloudListData () {
      const _this = this;
      _this.$api.getCloudListData().then(res => {
        _this.cloudList = res;
      });
      var newDate = new Date();
      _this.date = _this.dateFtt('yyyy-MM-dd hh:mm:ss', newDate);
    },
    // Date format dateFtt (fmt, date) {
      var o = {
        'M+': date.getMonth() + 1, // Month 'd+': date.getDate(), // Day 'h+': date.getHours(), // Hours 'm+': date.getMinutes(), // Minutes 's+': date.getSeconds(), // Seconds 'q+': Math.floor((date.getMonth() + 3) / 3), // Quarter S: date.getMilliseconds() // Milliseconds };
      if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(
          RegExp.$1,
          (date.getFullYear() + '').substr(4 - RegExp.$1.length)
        );
      }
      for (var k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
          fmt = fmt.replace(
            RegExp.$1,
            RegExp.$1.length === 1
              ? o[k]
              : ('00' + o[k]).substr(('' + o[k]).length)
          );
        }
      }
      return fmt;
    },
    // Scroll scroll () {
      const _this = this;
      _this.animate = true;
      clearTimeout(_this.setTimeout1);
      _this.setTimeout1 = setTimeout(() => {
        var parent = document.getElementById('con1');
        var first = document.getElementById('con1').children[0];
        var second = document.getElementById('con1').children[1];
        parent.removeChild(first);
        parent.removeChild(second);
        parent.appendChild(first);
        parent.appendChild(second);
        _this.animate = false;
      }, 500);
    }
  },
  created () {
    const _this = this;
    _this.getCloudListData();
    //The timer updates the data every 24 hours setInterval(() => {
      _this.getCloudListData();
    }, 24 * 60 * 60 * 1000);
  },
  mounted () {
    const _this = this;
    var contain = document.getElementById('box');
    _this.setInterval1 = setInterval(_this.scroll, _this.time);
    var setInterval2 = null;
    //Mouse moves into the scrolling area to stop scrolling contain.onmouseenter = function () {
      clearInterval(_this.setInterval1);
      var count = 0;
      // If the mouse does not move for more than ten seconds, start scrolling setInterval2 = setInterval(function () {
        count++;
        if (count === 10) {
          _this.scroll();
          _this.setInterval1 = setInterval(_this.scroll, _this.time);
        }
      }, 1000);
      //Stop scrolling as soon as the mouse moves and set the count to 0
      contain.onmousemove = function () {
        count = 0;
        clearInterval(_this.setInterval1);
      };
    };
    // The mouse moves out of the scrolling area contain.onmouseleave = function () {
      clearInterval(setInterval2);
      clearInterval(_this.setInterval1);
      _this.scroll();
      _this.setInterval1 = setInterval(_this.scroll, _this.time);
    };
  }
};
</script>

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 achieves seamless upward scrolling effect of messages
  • Realize seamless scrolling effect based on vue-seamless-scroll
  • Detailed explanation of how to use vue-seamless-scroll seamless scrolling component
  • Vue achieves seamless scrolling of infinite messages
  • Vue implements simple seamless scrolling effect
  • Vue implements seamless scrolling effect of list
  • Vue implements seamless vertical scrolling of lists
  • Vue3 implements CSS infinite seamless scrolling effect
  • Seamless scrolling effect based on vue.js
  • Vue or css animation to achieve seamless scrolling of the list upwards

<<:  How to set PATH environment variable in Linux system (3 methods)

>>:  Kill a bunch of MySQL databases with just a shell script like this (recommended)

Recommend

Detailed explanation of the problem when combining CSS ellipsis and padding

Text truncation with CSS Consider the following c...

Comprehensive summary of MYSQL tables

Table of contents 1. Create a table 1.1. Basic sy...

Vue implements 3 ways to switch tabs and switch to maintain data status

3 ways to implement tab switching in Vue 1. v-sho...

Detailed explanation of MySQL from getting started to giving up - installation

What you will learn 1. Software installation and ...

Solutions to invalid is Null segment judgment and IFNULL() failure in MySql

MySql Null field judgment and IFNULL failure proc...

MySQL MyISAM default storage engine implementation principle

By default, the MyISAM table will generate three ...

MySQL 5.7.18 Installer installation download graphic tutorial

This article records the detailed installation tu...

Understanding MySQL clustered indexes and how clustered indexes grow

In this note, we briefly describe What is the B+T...

Advantages of MySQL covering indexes

A common suggestion is to create indexes for WHER...

DHTML objects (common properties of various HTML objects)

!DOCTYPE Specifies the Document Type Definition (...

Basic knowledge of MySQL database

Table of contents 1. Understanding Databases 1.1 ...