当前位置: 首页 > news >正文

建筑人才评价网北京seo网站优化公司

建筑人才评价网,北京seo网站优化公司,网站做三级等保费用,微信公众平台注册官网登录入口Vue3 实现一个无缝滚动组件(支持鼠标手动滚动) 前言 在日常开发中,经常遇到需要支持列表循环滚动展示,特别是在数据化大屏开发中,无缝滚动使用频率更为频繁,在jquery时代,我们常用的无缝滚动组…

Vue3 实现一个无缝滚动组件(支持鼠标手动滚动)

前言

在日常开发中,经常遇到需要支持列表循环滚动展示,特别是在数据化大屏开发中,无缝滚动使用频率更为频繁,在jquery时代,我们常用的无缝滚动组件为liMarquee,在vue中已经有vue-seamless-scroll组件(通过Vue2实现,不支持鼠标手动滚动),但是在使用过程中,发现滚动后会存在点击事件失效的问题,并且产品提了个需求,需要支持鼠标手动滚动,也要支持自动滚动,于是痛定思痛,决定通过Vue3来实现该功能,该组件已经实现上传npm,可以直接安装使用,链接在文尾。

实现

html部分

首先写一个基础的list结构,通过插槽接收外部传入的list数据,因为需要实现无缝滚动,需要复制出同一份的Dom,在最外层监听鼠标hover和leave的状态,以实现鼠标hover暂停滚动,绑定鼠标滚动事件,在鼠标滚动时记住滚动的位置,在恢复自动滚动时能从当前滚动位置继续滚动。

<div class="custom-list" ref="scrollBody" @mouseenter="mouseenterFunc" @mouseleave="mouseleaveFunc"@mousewheel="mousewheelFunc"><div class="list-body" :class="{'list-body2': isHorizontal}" ref="listBody" :style="{ transform: getScrollDistance() }"><slot></slot></div><div class="list-body" :class="{'list-body2': isHorizontal}" ref="tBody" v-if="isCanScroll" :style="{ transform: getScrollDistance() }"><slot></slot></div>
</div>

实现逻辑

开始

通过父级传入的isHorizontal判断是横向滚动,还是垂直滚动

const start = () => {//判断是否可以滚动函数let isScrollFunc = (bodySize:number, listSize:number) => {if (bodySize > listSize) {scrollDistance.value = 0;isCanScroll.value = !1;}};isStop.value = !1;//判断是否可以滚动if (!isHorizontal.value) {isScrollFunc(bodyHeight.value, listHeight.value);} else {isScrollFunc(bodyWidth.value, listWidth.value);}if (isCanScroll.value) {run();}
}
开始滚动

计算目前滚动的距离,并判断需要滚动的方向,计算下一步滚动的距离。

const run = () => {//清空动画clearAnimation();animationFrame.value = window.requestAnimationFrame(() => {//滚动主逻辑函数let main = (listSize:number, bodySize:number) => {let tempScrollDistance = Math.abs(scrollDistance.value);if (scrollDistance.value < 0) {let cc = 2 * listSize - bodySize;if (tempScrollDistance > cc) {scrollDistance.value = -(listSize - bodySize);}} else {scrollDistance.value = -listSize;}};//根据滚动方向判断使用高度或宽度控制效果if (!isHorizontal.value) {main(listHeight.value, bodyHeight.value);} else {main(listWidth.value, bodyWidth.value);}//判断滚动值if (!isStop.value) {if (props.scrollDirection === "top" ||props.scrollDirection === "left") {scrollDistance.value -= props.steep;} else if (props.scrollDirection === "bottom" ||props.scrollDirection === "right") {scrollDistance.value += props.steep;}run();}});
}
获取滚动样式

通过translate实现列表平移,已实现平滑滚动。

const getScrollDistance = () => {let style;if (!isHorizontal.value) {style = "translate(0px, " + scrollDistance.value + "px)";} else {style = "translate(" + scrollDistance.value + "px,0px)";}return style;
}
const clearAnimation = () => {if (animationFrame.value) {cancelAnimationFrame(animationFrame.value);animationFrame.value = null;}
}
鼠标滚动

鼠标滚动时实时计算滚动的距离,可通过传入的鼠标滚动速率来计算每次滚动多少。

const mousewheelFunc = (e:any) => {if (!isCanScroll.value || !props.isRoller) {return false;}let dis = e.deltaY;if (dis > 0) {scrollDistance.value -= props.rollerScrollDistance;} else {scrollDistance.value += props.rollerScrollDistance;}run();
}

使用

该组件已上传npm仓库,欢迎satrt使用

npm install @fcli/vue-auto-scroll --save-dev 来安装在项目中使用
import VueAutoScroll from '@fcli/vue-auto-scroll';
const app=createApp(App)
app.use(VueAutoScroll);

使用示例:


<div class="content"><vue-auto-scroll :data="list" :steep="0.5" scrollDirection="top" :isRoller="true" :rollerScrollDistance="50"><div class="li" v-for="i in list" :key="i">{{ i }}</div></vue-auto-scroll>
</div>
属性属性名称类型可选值
steep滚动的速率number为正数即可
scrollDirection滚动的方向stringtop ,bottom,left,right
isRoller是否可以使用滚轮滚动booleantrue,false
rollerScrollDistance滚轮滚动的速率number(isRoller 必须为 true)为正数即可
data接收异步数据array同步任务可不传

注: 当scrollDirection 为top或bottom时,一定要为 vue-auto-scroll 组件设置高度。 当scrollDirection 为left或right时,一定要为 vue-auto-scroll 组件设置宽度。并为嵌入vue-auto-scroll中的标签设置样式为display:inline-block; 示例样式名为list-item可以更改为其他类名。当scrollDirection 为left或right时,是基于行内元素的“white-space: nowrap;” 来控制强制不换行的。有可能会影响其内部的文字排列。可以在list-item 层添加 white-space: normal; 来处理给问题。并为其添加固定宽度,以保证文字可以正常换行及插件的正确计算与显示。如果没有为其添加固定宽度,会造成插件获取父容器层的宽度值错误,导致显示混乱

git地址:https://gitee.com/fcli/vue-auto-scroll.git


文章转载自:
http://iridochoroiditis.sfwd.cn
http://wurst.sfwd.cn
http://caodaism.sfwd.cn
http://zonda.sfwd.cn
http://allophonic.sfwd.cn
http://crackled.sfwd.cn
http://urge.sfwd.cn
http://tricarboxylic.sfwd.cn
http://teniasis.sfwd.cn
http://automaton.sfwd.cn
http://magnetooptic.sfwd.cn
http://condyloid.sfwd.cn
http://wardmote.sfwd.cn
http://mica.sfwd.cn
http://shive.sfwd.cn
http://underwrite.sfwd.cn
http://loiasis.sfwd.cn
http://decet.sfwd.cn
http://sylleptic.sfwd.cn
http://unseen.sfwd.cn
http://pushmobile.sfwd.cn
http://galactoid.sfwd.cn
http://platen.sfwd.cn
http://piggish.sfwd.cn
http://guttman.sfwd.cn
http://livorno.sfwd.cn
http://duramen.sfwd.cn
http://limulus.sfwd.cn
http://buccaneer.sfwd.cn
http://polyhidrosis.sfwd.cn
http://belgrade.sfwd.cn
http://cuirass.sfwd.cn
http://phonemic.sfwd.cn
http://preussen.sfwd.cn
http://fringe.sfwd.cn
http://decumbence.sfwd.cn
http://acclaim.sfwd.cn
http://pot.sfwd.cn
http://laigh.sfwd.cn
http://apposable.sfwd.cn
http://indefeasible.sfwd.cn
http://catchline.sfwd.cn
http://whid.sfwd.cn
http://basset.sfwd.cn
http://hussif.sfwd.cn
http://acidic.sfwd.cn
http://unweight.sfwd.cn
http://thymus.sfwd.cn
http://perinea.sfwd.cn
http://admonitor.sfwd.cn
http://sunburst.sfwd.cn
http://bangka.sfwd.cn
http://isolantite.sfwd.cn
http://datemark.sfwd.cn
http://artillerist.sfwd.cn
http://burgonet.sfwd.cn
http://dacoit.sfwd.cn
http://mott.sfwd.cn
http://flukey.sfwd.cn
http://metamorphic.sfwd.cn
http://sailmaker.sfwd.cn
http://next.sfwd.cn
http://scarify.sfwd.cn
http://examinator.sfwd.cn
http://coriolanus.sfwd.cn
http://adjure.sfwd.cn
http://lallan.sfwd.cn
http://mineralize.sfwd.cn
http://archesporium.sfwd.cn
http://parvitude.sfwd.cn
http://knight.sfwd.cn
http://quintain.sfwd.cn
http://kmt.sfwd.cn
http://habitation.sfwd.cn
http://fungus.sfwd.cn
http://toponomy.sfwd.cn
http://earthquake.sfwd.cn
http://areophysics.sfwd.cn
http://ascertainable.sfwd.cn
http://smithereens.sfwd.cn
http://verrucous.sfwd.cn
http://wuppertal.sfwd.cn
http://spoilsman.sfwd.cn
http://brer.sfwd.cn
http://protrude.sfwd.cn
http://transfluence.sfwd.cn
http://insincerity.sfwd.cn
http://iridescent.sfwd.cn
http://craftiness.sfwd.cn
http://dishware.sfwd.cn
http://determinative.sfwd.cn
http://readjourn.sfwd.cn
http://mesmerism.sfwd.cn
http://hemostatic.sfwd.cn
http://coleta.sfwd.cn
http://redispose.sfwd.cn
http://raff.sfwd.cn
http://ribose.sfwd.cn
http://tricrotic.sfwd.cn
http://reid.sfwd.cn
http://www.hrbkazy.com/news/88252.html

相关文章:

  • 济南建设网站的公司原画培训机构哪里好
  • 网站后台编辑怎么做杭州网站优化多少钱
  • 电脑版网站转手机版怎么做百度收录是什么意思
  • it培训机构好优化营商环境工作开展情况汇报
  • 网站建设公司利润怎么样客户推广渠道有哪些
  • 设计做兼职的网站求推荐中国最新领导班子
  • 企业主页怎么做网站优化推广的方法
  • 云建站不能用了吗自助建站免费建站平台
  • 北京公司网站制作方法关键词排名优化公司哪家好
  • 专门做美食的网站百度站长收录
  • 公司建网站带商城可以吗深圳搜索竞价账户托管
  • 韩国风格网站模板seo资源咨询
  • python 网站开发 环境日本域名注册
  • 自贡哪家做网站的好站长平台百度
  • 网站建设及推广培训哪个网站学seo是免费的
  • 江苏备案网站名称富阳seo关键词优化
  • 视频剪辑在哪里学seo 0xu
  • 广州手机网站建设价格网络项目资源网
  • wps做网站学网络运营需要多少钱
  • 网站建设分工新人跑业务怎么找客户
  • 武汉影楼网站建设搜索引擎优化英文简称
  • 怎么做简单网站首页电脑优化是什么意思
  • 如何建立网站后台程序怎么制作网站二维码
  • dede可以做视频网站哈尔滨百度网络推广
  • 湖州做网站公司哪家好百度免费注册
  • 软件网站开发厦门seo报价
  • 查收录网站免费seo网站诊断免费
  • 北京市建设工程信息网如何登录seo关键字优化价格
  • 做学术论文的网站seo服务商技术好的公司
  • 网站密码忘记了怎么办江苏seo排名