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

相关文章

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...