ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

vue-seamless-scroll 无缝滚动事件用法、@click点击事件失效问题

2022-02-28 19:02:23  阅读:281  来源: 互联网

标签:vue 滚动 name seamless 事件 单步 默认值 click 无缝


使用方法:

1、安装

npm install vue-seamless-scroll --save

2、引入

<vue-seamless-scroll :data="listData" :class-option="classOption"></vue-seamless-scroll>

import vueSeamlessScroll from 'vue-seamless-scroll'

components: {
vueSeamlessScroll
},

3、配置参数

// 监听属性 类似于data概念

computed: {
	defaultOption () {
		return {
step: 0.2, // 数值越大速度滚动越快
limitMoveNum: 2, // 开始无缝滚动的数据量 this.dataList.length
hoverStop: true, // 是否开启鼠标悬停stop
direction: 1, // 0向下 1向上 2向左 3向右
openWatch: true, // 开启数据实时监控刷新dom
singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
		}
	}
}, 

注意事项:

滚动重复加载问题:第一轮与第二轮数据同时显示,第二轮的数据@click点击事件无法生效。
解决方法:

  1. 给外层加点击事件,event.target获取点击dom元素
  2. 绑定属性,利用:**data-**name获取,
  3. 调用:与:data-name对应,获取自定义属性name时候用event.target.dataset.name
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

原理分析:
事件委托
事件委托
阮一峰老师的js运行机制
事件委托依靠的就是事件冒泡和事件捕获的机制

事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。
事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止。

所谓的事件委托就是通过监听一个父元素,来给不同的子元素绑定事件,减少监听次数,从而提升速度。

完整代码:

<div class="chatbg" style="margin-top:3px" @click="clickProps($event)">
                            <ul class="item">
                                <li style="list-style-type:none;">
                                    <span class='time'>
                                        时间
                                    </span>
                                    <span class='content'>
                                        内容
                                    </span>
                                </li>
                            </ul>
                            <vue-seamless-scroll :data="listData" class="seamless-warp" :class-option="classOption">
                                <ul class="item">
                                    <li v-for="(item, index) in listData" :key="'list-' + index"
                                         style="list-style-type:none;" :data-dept="item.id">
                                        <span class="time" :data-dept="item.id">{{item.date}}</span>
                                        <span class="content" :style="{'color':item.color}" :data-dept="item.id">{{ item.title }}</span>
                                    </li>
                                </ul>
                            </vue-seamless-scroll>
                        </div>



clickProps(e){
                var id = e.target.dataset.dept
                this.clickItem(id)
            },
            clickItem(id) {
                for(var i=0;i<this.listData.length;i++)
                {
                    if(this.listData[i].id===id)
                    {
                        if(this.listData[i].color==='yellow'){
                            this.$message.warning(this.listData[i].title)
                        }else if(this.listData[i].color==='red'){
                            this.$message.error(this.listData[i].title)
                        }
                    }
                }
            }

参考链接:
https://www.jianshu.com/p/a2a7d3a9cf2b
https://blog.csdn.net/weixin_43254676/article/details/94025887

标签:vue,滚动,name,seamless,事件,单步,默认值,click,无缝
来源: https://blog.csdn.net/qq_41797741/article/details/123181545

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有