vue原生滿屏滾動(dòng)方式
vue原生滿屏滾動(dòng)
vue原生滿屏滾動(dòng)效果,點(diǎn)擊左側(cè)導(dǎo)航欄可滾動(dòng)至對(duì)應(yīng)屏幕。
效果圖

代碼
<template>
<div class='page-sum'>
<div class='distance'>
<!-- 左側(cè)導(dǎo)航欄-->
<div class='page-nav'>
<div>
<div @click='scrollByIndex(0)' class='nav-type'>
<p :style="navIndex===0?'color:#00D2C7':''">企業(yè)主頁</p>
</div>
<div @click='scrollByIndex(4)' class='nav-type'>
<p :style="navIndex===1?'color:#00D2C7':''">案例中心</p>
</div>
<div @click='scrollByIndex(5)' class='nav-type'>
<p :style="navIndex===2?'color:#00D2C7':''">方案中心</p>
</div>
<div @click='scrollByIndex(7)' class='nav-type'>
<p :style="navIndex===3?'color:#00D2C7':''">咨訊庫</p>
</div>
<div @click='scrollByIndex(9)' class='nav-type'>
<p :style="navIndex===4?'color:#00D2C7':''">文檔庫</p>
</div>
</div>
</div>
<div class='page-box'>
<div class='page-one' style='background: #5daf34'>
第一頁
</div>
<div class='page-two' style='background: #1b8bff'>
第二頁
</div>
<div class='page-three' style='background: #00a2d4'>
第三頁11
</div>
<div class='page-four' style='background: #fab6b6'>
第三頁22
</div>
<div class='page-five' style='background: #00DECB'>
第四頁
</div>
<div class='page-six' style='background: #00D2C7'>
第五頁11
</div>
<div class='page-seven' style='background: #2D64B3'>
第五頁22
</div>
<div class='page-eight' style='background: #fab6b6'>
第六頁11
</div>
<div class='page-nine' style='background: #00DECB'>
第六頁22
</div>
<div class='page-ten' style='background: #00b7ee'>
第七頁
</div>
</div>
</div>
</div>
</template><script>
export default {
name: 'index',
data() {
return {
navIndex: 0,
wheel: 0,
style: ''
}
},
mounted() {
this.initWheel() //整屏移動(dòng)
},
watch: {
wheel: {
handler(val) {
}
}
},
methods: {
initWheel() {
this.wheel = 0 // 0 到 10
let timer = 1500
let agent = navigator.userAgent.toLowerCase()
let isMac = /macintosh|mac os x/i.test(navigator.userAgent)
if (agent.indexOf('win32') >= 0 || agent.indexOf('wow32') >= 0 || agent.indexOf('win64') >= 0 || agent.indexOf('wow64') >= 0) {
timer = 1000
}
if (isMac) {
timer = 1500
}
window.addEventListener('wheel', this.throttle(this.wheelHandler, timer)) //兼容mac的方法 1500 timer windows 為1000 mac為1500
},
throttle(func, delay) {
let prev = Date.now()
return function() {
let context = this
let args = arguments
let now = Date.now()
if (now - prev >= delay) {
func.apply(context, args)
prev = Date.now()
}
}
},
wheelHandler(e) {
let main = document.querySelector('.page-box')
let headHeight = document.querySelector('.page-one').clientHeight
if (e.deltaY > 0) {
if (this.wheel === 9) return
this.wheel++
} else {
if (this.wheel === 0) return
this.wheel--
}
if (this.wheel === 0) {
main.style.transform = `translateY(0)` //整屏上下移
} else {
main.style.transform = `translateY(calc(-${headHeight}px - ${(this.wheel - 1) * 100}vh)` //整屏上下移
}
// 劃分左側(cè)導(dǎo)航欄內(nèi)有幾屏
if (this.wheel >= 0 && this.wheel < 4) { // 0 4 6 8
this.navIndex = 0
} else if (this.wheel >= 4 && this.wheel < 5) {
this.navIndex = 1
} else if (this.wheel >= 5 && this.wheel < 7) {
this.navIndex = 2
} else if (this.wheel < 9) {
this.navIndex = 3
} else if (this.wheel === 9) {
this.navIndex = 4
}
},
scrollByIndex(index) {
let e = {
deltaY: 100
}
this.wheel = index - 1
this.wheelHandler(e)
}
}
}
</script>
<style lang='scss' scoped>
.page-sum {
width: 100%;
height: 100vh;
overflow: hidden;
position: relative;
}
.distance {
width: 75rem;
margin: 0 auto;
display: flex;
justify-content: space-between;
}
.page-box {
width: 65.625rem;
transform: translateY(0);
transition: 1s;
}
.page-one {
height: 100vh;
position: relative;
overflow: hidden;
}
.page-two {
height: 100vh;
}
.page-three, .page-four {
height: 100vh;
}
.page-five {
height: 100vh;
}
.page-six {
height: 100vh;
}
.page-seven {
height: 100vh;
}
.page-eight {
background: #fff;
height: 100vh;
}
.page-nine {
width: 100%;
height: 100vh;
}
.page-ten {
height: 100vh;
}
.page-nav {
transform: translateY(50%);
width: 8rem;
height: 22rem;
text-align: center;
border-radius: 0.125rem;
background: #FFF;
box-shadow: 2px 1px 8px 1px rgba(208, 208, 208, 0.16);
}
.nav-type {
cursor: pointer;
font-size: 1rem;
font-weight: 400;
line-height: 3rem;
color: #323232;
}
//滾動(dòng)條的寬度
::-webkit-scrollbar {
width: 0.25rem;
height: 0.25rem;
}
//滾動(dòng)條的設(shè)置
::-webkit-scrollbar-thumb {
background-color: #ddd;
background-clip: padding-box;
min-height: 1.75rem;
}
</style>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue 對(duì)axios get pust put delete封裝的實(shí)例代碼
在本篇文章里我們給各位整理的是一篇關(guān)于vue 對(duì)axios get pust put delete封裝的實(shí)例代碼內(nèi)容,有需要的朋友們可以參考下。2020-01-01
Vue3實(shí)現(xiàn)常見附件的預(yù)覽功能
最近開發(fā)了一個(gè)建筑相關(guān)的移動(dòng)端項(xiàng)目,其中有各種附件預(yù)覽的功能,本文總結(jié)出了一些Vue常用的文件預(yù)覽方式,希望對(duì)大家有一定的幫助2025-04-04
VueJs中如何使用Teleport及組件嵌套層次結(jié)構(gòu)詳解
這篇文章主要為大家介紹了VueJs中如何使用Teleport及組件嵌套層次結(jié)構(gòu)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Vue使用jsmind實(shí)現(xiàn)生成腦圖的示例代碼
這篇文章主要為大家詳細(xì)介紹了Vue如何使用jsmind實(shí)現(xiàn)生成腦圖,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-03-03
django使用channels2.x實(shí)現(xiàn)實(shí)時(shí)通訊
這篇文章主要介紹了django使用channels2.x實(shí)現(xiàn)實(shí)時(shí)通訊,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
Vue2.X 通過AJAX動(dòng)態(tài)更新數(shù)據(jù)
這篇文章主要介紹了Vue2.X 通過AJAX動(dòng)態(tài)更新數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
vue使用pdfjs-dist+fabric實(shí)現(xiàn)pdf電子簽章的思路詳解
最近領(lǐng)導(dǎo)提了一個(gè)新需求:仿照e簽寶,實(shí)現(xiàn)pdf電子簽章,本文給大家介紹vue使用pdfjs-dist+fabric實(shí)現(xiàn)pdf電子簽章的思路,感興趣的朋友一起看看吧2023-12-12

