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

news2024/11/25 5:03:47

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

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

实现效果

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

遇到问题

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

具体实现

<template>
  <div
    class="scroll-list h_24"
    ref="scrollList"
    @click="onSelect($event)"
  >
    <vue-seamless-scroll
      v-if="data && data.length"
      :data="data"
      ref="seamlessScroll"
      :class-option="vueSeamlessOptions"
      :style="{ height: scrollHeight }"
    >
      <div class="scroll-list_body">
        <div
          class="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方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AgentMD:通过大规模临床工具学习提升语言代理的风险预测能力

人工智能咨询培训老师叶梓 转载标明出处 临床计算器在医疗保健中扮演着至关重要的角色&#xff0c;它们通过提供准确的基于证据的预测来辅助临床医生进行诊断和预后评估。然而&#xff0c;由于可用性挑战、传播不畅和功能受限&#xff0c;这些工具的广泛应用常常受限。为了克服…

如何备份电脑所有数据?有哪些方法值得参考借鉴?

备份电脑所有数据是防护数据丢失和泄密的重要一项措施&#xff0c;备份数据也有不同的方式和工具&#xff0c;正确的工具能帮你省时省力&#xff0c;下面盘点了几个方法&#xff0c;来看哪一种最适合你。 一、使用专业备份软件 第三方服务器文件自动备份软件&#xff1a;如安企…

AI恶搞《黑神话:悟空》爆火!

黑神话简直太火了&#xff0c;各个热搜榜都有它的身影。 单 Steam 上的销量榜就是榜首&#xff0c;同时在线人数突破 200W。 估计周末在线人数更多&#xff0c;能不能破最高同时在线人数记录&#xff0c;拭目以待。 最近有不少人用清影 AI 生成鬼畜视频&#xff0c;我也用《黑…

【精选】基于大数据的___银行信用卡用户的数仓系统的设计与实现(全网独一无二,最新定制)

目录&#xff1a; 关键技术介绍 PYTHON语言简介 大数据介绍 MySql数据库 DJANGO框架 Hadoop介绍 Scrapy介绍 B/S架构 系统的设计 系统总功能模块设计 系统测试 系统测试的目的 软件测试过程 6.3测试用例 参考代码&#xff1a; 为什么选择我&#xff1a; 博主介绍&am…

Ciallo~(∠・ω・ )⌒☆第二十三篇 python 可迭代,迭代器,生成器,装饰器

Python中的可迭代对象&#xff08;iterable&#xff09;是指可以被迭代的对象&#xff0c;例如列表、元组、字符串等。可迭代对象可以通过循环来访问其元素。 迭代器&#xff08;iterator&#xff09;是一种能够逐个访问元素的对象&#xff0c;它实现了__iter__()和__next__()方…

C++ TinyWebServer项目总结(1. 配置安装)

语雀文档 项目记录会先更新在我的语雀文档 &#xff1a;Webserver 然后再同步发送到CSDN上&#xff0c;有些格式问题实在是懒得改了&#xff0c;可能会导致大家看的不舒服&#xff0c;建议有需要的大家可以看看我的原文。 安装环境 Ubuntu 20.04 mysql Ver 8.0.39-0ubuntu0…

活动策划必备:活动页面设计全攻略

活动页面是营销策略中的重要环节&#xff0c;它不仅传递活动信息&#xff0c;更是吸引用户参与和转化的关键。设计师需要深入理解活动的核心价值和目标受众的需求&#xff0c;确保设计能够准确传达活动信息&#xff0c;同时激发用户的参与欲望。通过这样的设计&#xff0c;活动…

【AI Agent极限挑战赛】三大赛题揭晓

由AIGC开放社区联合联想拯救者、英特尔共同主办的【2024 AI Agent极限挑战赛】于8月17日在上海中庚聚龙酒店成功举办。赛事全面考察参赛者将AI技术应用于实际问题的能力。比赛内容包括对大语言模型的理解、提示词&#xff08;Prompt&#xff09;的结构化调优技术、个人助理Agen…

做谷歌seo如何确保网站的速度快?

想做谷歌seo&#xff0c;网站的快慢也是一个重要因素&#xff0c;至少不能慢的让客户等得不耐烦&#xff0c;以下是一些实用的小建议&#xff0c;帮助你提高页面加载速度&#xff0c;确保用户体验的顺畅。 压缩图片文件大小&#xff1a;图片通常是网页上最占用带宽的资源之一&a…

记一次:Datawhale AI夏令营-第五期-CV-Task01

前言&#xff1a;前面参加了第四期AIGC算是入门了&#xff0c;第五期我又来了&#xff0c;这期我参加了两个&#xff0c;计算机视觉CV所以按照惯例写一个笔记。 学习任务 一、计算机视觉CV的了解 1.1、什么是计算机视觉&#xff1f; 1.2、什么是YOLO&#xff1f;什么是物体…

SAP赋能消费品行业:创新与效率的双重驱动

在快速消费品行业&#xff0c;市场变化如同潮水般汹涌&#xff0c;消费者需求日益个性化&#xff0c;竞争愈发激烈。SAP系统以其先进的企业资源规划技术&#xff0c;为消费品行业提供了强大的数字化解决方案&#xff0c;助力企业在创新与效率的双重驱动下&#xff0c;实现业务的…

上位机图像处理和嵌入式模块部署(linux Qt程序的编译)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 linux上位机写程序&#xff0c;大家都喜欢用designer设计界面&#xff0c;用qt creator编写程序。这样其实也无可厚非。但是从效率和快速开发的角度…

视频智能分析工业排污检测算法及算法源码全套应用方案

工业排污检测算法在环境保护领域发挥着至关重要的作用&#xff0c;其主应用场景可以归纳如下&#xff1a; 应用场景 1、化工厂&#xff1a;监测化工厂的废气、废水排放情况&#xff0c;预防化学品泄漏污染环境。通过实时监测和数据分析&#xff0c;确保化工厂的排放符合环保标…

鸿蒙Harmony开发知识:Arkts函数

函数 函数声明 函数声明引入一个函数&#xff0c;包含其名称、参数列表、返回类型和函数体。 以下示例是一个简单的函数&#xff0c;包含两个string类型的参数&#xff0c;返回类型为string&#xff1a; function add(x: string, y: string): string {let z: string ${x} …

Xinstall:让App下载摆脱注册码的束缚,效率翻倍!

你是否曾经因为繁琐的注册码而放弃了某个App的下载&#xff1f;或者在安装过程中因为邀请码填写错误而功亏一篑&#xff1f;这些问题&#xff0c;相信很多人都曾遇到过。今天&#xff0c;我要为大家介绍一个神奇的品牌——Xinstall&#xff0c;它凭借强大的免注册码下载技术&am…

二叉树练习

1.认识树 树的根节点及其子树&#xff0c;都是相对的概念。在任何一棵树中都有一个根节点&#xff0c;而这棵树本身又可以是别的树的子树。树的基本概念有&#xff1a; A)双亲和孩子&#xff1a;一个节点的后继节点被称为该节点的孩子&#xff0c;该节点称为这些孩子的双亲。…

面试车载测试岗位,我们应该如何准备呢?

在进行车载测试方面的简历撰写以及面试时&#xff0c;我们需要注意的几点如下&#xff1a; 01、简历方面 1.没有相关项目怎么办? 要投递和面试的岗位所要参与的项目和做过的项目不可能是完全一样的。招聘企业更关注工作思路以及解决问题的思路。 不同的公司就算是做一样的项…

无人机:航拍书籍推荐

写在前面 学习航拍&#xff0c;整理一些书籍分享理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真做完事情&#xff0c;战胜焦虑&#xff0c;战胜那些心里空荡荡的时刻&…

JavaWeb基础 -- Servlet

JavaWeb基础 – Servlet 1.Servlet简介 1.1 Servlet是什么 Servlet本身是用Java编写的&#xff0c;运行在Web服务器上的应用程序&#xff0c;并作为Web浏览器和其他HTTP客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单输入的数据…

iOS 修改 tabbar 图标大小 01

0x00 transform 在点击 tabbar 时&#xff0c;通过修改图片的 transform 属性&#xff0c;来修改图片大小。 遍历 self.tabBar.subviews 来查找 图片。 imageView.transform CGAffineTransformScale(imageView.transform, 4, 4); 你会发现&#xff0c;根本改不动&#xff01…