您好,登錄后才能下訂單哦!
本篇內容介紹了“vue怎么實現簡單無縫滾動效果”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
效果
實現思路
在vue中如何復制一份列表出來呢且不能丟失綁定的事件,很簡單使用slot插槽,使用兩個插槽我們就擁有了兩個列表
<div class="listScroll" ref="box"> <slot></slot> <slot></slot> </div>
組件完整代碼
<template> <div class="listScroll" ref="box"> <slot></slot> <slot></slot> </div> </template> <script> export default { name: "listScroll", created() {}, mounted() { //在盒子內容高度小于可視高度時不滾動 if (this.boxHeight < this.ele0.clientHeight) { this.start(this.height); this.setEvet(); } else { this.isScroll = false; } }, props: { speed: { default: 1, type: Number, }, }, computed: { //第一個slot ele0() { return this.$refs.box.children[0]; }, //第二個slot ele1() { return this.$refs.box.children[1]; }, //盒子的可視高度 boxHeight() { return this.$refs.box.clientHeight; }, }, data() { return { height: 0, isScroll: true, }; }, methods: { //鼠標移入停止滾動 移出繼續滾動 setEvet() { this.$refs.box.onmouseenter = () => { this.isScroll = false; // this.height = 0; }; this.$refs.box.onmouseleave = () => { this.isScroll = true; this.$nextTick(() => { this.start(this.height); }); }; }, //滾動方法 start(height) { this.ele0.style = `transform:translateY(-${height}px);`; this.ele1.style = `height:${this.boxHeight}px;transform:translateY(-${height}px);overflow: hidden;`; if (height >= this.ele0.clientHeight) { this.height = 0; } else { this.height += this.speed; } if (!this.isScroll) return; window.requestAnimationFrame(() => { this.start(this.height); }); }, }, }; </script> <style lang="less" scoped> .listScroll { overflow: hidden; } .hover { overflow-y: auto; } .hide { display: none; } </style>
使用
<template> <div class="scroll"> <list-scroll class="box" :speed="1"> <div class="list"> <div class="item" v-for="item in list" :key="item.xh"> <span>{{ item.xh }}</span ><span>{{ item.label }}</span> </div> </div> </list-scroll> </div> </template> <script> import ListScroll from "@/components/listScroll"; export default { name: "scroll", components: { ListScroll }, data() { return { list: new Array(10) .fill(1) .map((s, i) => ({ xh: i + 1, label: "hello wrold" })), }; }, }; </script> <style lang="less" scoped> .box { height: 300px; } .list { padding: 0 10px; width: 300px; .item { display: flex; justify-content: space-between; padding: 5px 0; cursor: pointer; &:hover { background-color: #95a5a6; } } } </style>
“vue怎么實現簡單無縫滾動效果”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。