fullPage豎屏滾動 vue|react版

最近在 react 項目中有要實現(xiàn)全屏滾動的效果怎诫,為了節(jié)省時間

在度娘的指引下引入了 react-fullpage

但是插件終究是插件晌杰,在怪異的需求之下,再好的插件也得跪。

因為fullPage用了錨點全度,而 react路由又使用了 HashHistory

so 被逼無奈只好自己手?jǐn)]一個了


在線預(yù)覽


因為vue相對簡單,所以就說說react版的吧

全屏滾動桅狠,說到底其實就是一個豎屏的輪播圖而已

首先需要定義 state

this.state={
    bannerList:[                 //盒子背景顏色
        {
            bg:"#f6f6f6"
        },
        {
            bg:"#87d9e1"
        },
        {
            bg:"#8185d7"
        },
        {
            bg:"#e187cf"
        }
    ],
    offsetheight:document.documentElement.clientHeight,    //獲取當(dāng)前頁面的高度
    fullPage:0,           //當(dāng)前在第幾頁
    fullPageNum:false,        //是否在滑動
}

然后是靜態(tài)頁面的布局

HTML


render() {
    let fullPage=this.state.bannerList.map((i,index)=>{
        return <div key={index} style={{'height':this.state.offsetheight+'px','background':i.bg}}></div>
    })     //使用map來循環(huán)添加dom
    let fullList=this.state.bannerList.map((i,index)=>{
        return <div key={index} className={this.state.fullPage==index?'color':''} onClick={this.pageInfo.bind(this,index)}></div>
    })
    return (
        <div className="section" style={{'height':this.state.offsetheight+'px'}}>
            <div className="container" style={{'transform': 'translate3d(0px,-'+ this.state.fullPage*this.state.offsetheight +'px, 0px)'}}>
                {fullPage}
            </div>
            <div className="fixed-list">
                {fullList}
            </div>
        </div>
    );
}

css

.section{
    overflow: hidden;
}
.container{
    width: 100%;height: 100%;
    position: relative; transform: translate3d(0px, 0px, 0px); transition: all 1000ms ease;
}
.fixed-list{
    position: fixed;
    top: 40%;right: 20px;
}

.fixed-list div{
    width: 20px;height: 20px;background:#ccc;border-radius: 50%;margin-bottom: 20px;
}

.fixed-list div.color{
    background:#000;
}

豎屏輪播圖讼载,當(dāng)然得有焦點點擊啦

//
//點擊左側(cè)小點時跳轉(zhuǎn)到相應(yīng)的page
//
pageInfo(index){
    this.setState({
        fullPage:index
    })
}

然后去定義鼠標(biāo)滾動事件

//
//鼠標(biāo)事件
//
scroll(e){
    e=e || window.event;
    //
    //是否正在滑動
    //
    if(this.state.fullPageNum){
        return false;
    }
    //
    //   e.wheelDelta為負(fù)數(shù)時向下滑動
    //
    if(e.wheelDelta<0){
        if(this.state.fullPage>=3){
            return false
        }
        this.setState({fullPageNum:true})
        this.pageInfo(this.state.fullPage+1);
        //
        //  css設(shè)置動畫事件為1000,所以等到1000ms后滾動狀態(tài)為false
        //
        setTimeout(()=>{
            this.setState({fullPageNum:false})
        },1000)
    //
    //   否則就是向上劃
    //
    }else{
        if(this.state.fullPage<=0){
            return false;
        }
        this.setState({fullPageNum:true});
        this.pageInfo(this.state.fullPage-1);
        setTimeout(()=>{
            this.setState({fullPageNum:false})
        },1000)
    }
}


最后在react componentDidMount生命周期里為doucment添加鼠標(biāo)滾動事件

componentDidMount(){
        //
        //添加鼠標(biāo)滑動事件
        //
        if(document.addEventListener){
            document.addEventListener('DOMMouseScroll',this.scroll.bind(this),false);
        }
        window.onmousewheel=document.onmousewheel=this.scroll.bind(this);
    }

至此一個簡單的react 豎屏滾動demo就完成啦

React版源碼鏈接
Vue版源碼鏈接

因為只是簡單實現(xiàn)中跌,所以有很多功能還缺失咨堤。
有什么建議或者疑問請在評論區(qū)不吝賜教。

以上漩符。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末一喘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嗜暴,更是在濱河造成了極大的恐慌凸克,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闷沥,死亡現(xiàn)場離奇詭異萎战,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)舆逃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蚂维,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人路狮,你說我怎么就攤上這事虫啥。” “怎么了奄妨?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵涂籽,是天一觀的道長。 經(jīng)常有香客問我砸抛,道長评雌,這世上最難降的妖魔是什么树枫? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮柳骄,結(jié)果婚禮上团赏,老公的妹妹穿的比我還像新娘。我一直安慰自己耐薯,他們只是感情好舔清,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著曲初,像睡著了一般体谒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臼婆,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天抒痒,我揣著相機(jī)與錄音,去河邊找鬼颁褂。 笑死故响,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颁独。 我是一名探鬼主播彩届,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼誓酒!你這毒婦竟也來了樟蠕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤靠柑,失蹤者是張志新(化名)和其女友劉穎寨辩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歼冰,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡靡狞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了隔嫡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甸怕。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畔勤,靈堂內(nèi)的尸體忽然破棺而出蕾各,到底是詐尸還是另有隱情扒磁,我是刑警寧澤庆揪,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站妨托,受9級特大地震影響缸榛,放射性物質(zhì)發(fā)生泄漏吝羞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一内颗、第九天 我趴在偏房一處隱蔽的房頂上張望钧排。 院中可真熱鬧,春花似錦均澳、人聲如沸恨溜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糟袁。三九已至,卻和暖如春躺盛,著一層夾襖步出監(jiān)牢的瞬間项戴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工槽惫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留周叮,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓界斜,卻偏偏與公主長得像仿耽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锄蹂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容