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

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

17 通过ref代替DOM用来获取元素和组件的引用

重点 ref :官网给出的解释是: ref: 用于注册对元素或子组件的引用。引用将在父组件的$refs 对象下注册。如果在普通DOM元素上使用,则引用将是该元素;如果在子组件上使用,则引用将是组件实例: <!-- vm.$refs.p will be the DOM node --><p ref="p">hello</p><!-- vm.$refs.child will be the c