VueSeamlessScroll 无缝滚动点击事件不生效(需要给复制Dom加样式)

本文主要是介绍VueSeamlessScroll 无缝滚动点击事件不生效(需要给复制Dom加样式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VueSeamlessScroll 无缝滚动点击事件不生效(需要给复制Dom加样式)

  • 实现效果
  • 遇到问题
  • 具体实现
  • 扩展

实现效果

  • VueSeamlessScroll 列表无缝滚动,且可以选择某一项进行选中改变背景,并且将选中的数据传到其他接口中
    在这里插入图片描述

遇到问题

  • 问题:数据的点击事件,只有第一遍循环的时候生效,后面循环出来的数据都不生效
  • 原因:不能点击的原因是因为html元素是复制出来的(滚动组件是将后面的复制出来一份,进行填铺页面,方便滚动)
  • 解决方案: 往滚动组件的父节点上添加绑定事件(js冒泡机制),通过e.target定位到具体点击位置。

具体实现

<template><divclass="scroll-list h_24"ref="scrollList"@click="onSelect($event)"><vue-seamless-scrollv-if="data && data.length":data="data"ref="seamlessScroll":class-option="vueSeamlessOptions":style="{ height: scrollHeight }"><div class="scroll-list_body"><divclass="scroll-list_body__item"v-for="(item, index) in data":key="index":data="JSON.stringify(item)":style="{ backgroundColor: item.index === activeIndex ? color : '' }"><!-- 你的滚动列表内容 --></div></div></vue-seamless-scroll></div>
</template>
<script>
import vueSeamlessScroll from "vue-seamless-scroll";
export default {name: "scroll-list",components: {vueSeamlessScroll,},props: {// 你的渲染数据data: {type: Array,default: () => [],},// 传入的选中背景色color: {type: String,default: "rgba(250, 173, 20, 0.1)",},},data() {return {// 滚动高度scrollHeight: 0,activeIndex: undefined,vueSeamlessOptions: {step: 1, // 设置步长为1,即每次滚动一条数据limitMoveNum: 8, // 限制滚动次数为8次hoverStop: true, // 鼠标悬停时停止滚动direction: 1, // 滚动方向为向下},};},watch: {data() {this.activeIndex = undefined;},},mounted() {const scrollHeight = this.$refs["scrollList"].clientHeight;if (scrollHeight) {this.scrollHeight = `${scrollHeight}px`;}},methods: {onSelect(e) {const path = e.path || (e.composedPath && e.composedPath());let target = path.filter((r) => /scroll-list_body__item/.test(r.className));if (target.length) target = target[0];else return;//列表超过8条数据即开始滚动有复制元素时才这样操作if (this.data.length > 8) {const classNames = document.getElementsByClassName("scroll-list_body__item");// 循环获取到的元素集合Array.prototype.forEach.call(classNames, function (element) {element.style.background = "";});target.style.background = this.color;}const data = JSON.parse(target.getAttribute("data")); // 单项数据详情,点击那行数据的所有数据this.activeIndex = data.index;//你要做的其他操作},},
};
</script>
<style lang="less" scoped>
.scroll-list {overflow: hidden;&_body {&__item {display: flex;align-items: center;padding: 8px 0;position: relative;cursor: pointer;// 你的滚动列表样式}}
}
</style>

扩展

  • 获取class为xxx的元素
// 获取class为email-tag的元素:
var elements = document.getElementsByClassName('xxx');
// 循环获取到的元素集合
Array.prototype.forEach.call(elements, function (element) {console.log(element)
});
  • 为什么不能直接用forEach 循环?

因为document.querySelectorAll()返回的并不是我们想当然的数组,而是NodeList,对NodeList,它里面没有.forEach方法。

这篇关于VueSeamlessScroll 无缝滚动点击事件不生效(需要给复制Dom加样式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097535

相关文章

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField