成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在全屏滾動頁面下實(shí)現(xiàn)鼠標(biāo)滾輪的子級交互

godiscoder / 3062人閱讀

摘要:由此,我們可以完全屏蔽的默認(rèn)滾動觸發(fā),改用方法控制全屏滾動,解除了全屏滾動與鼠標(biāo)滾輪事件的強(qiáng)耦合。此外,通過定時器延時秒設(shè)置的值,將用戶的鼠標(biāo)滾輪操作強(qiáng)制分為兩步,最終實(shí)現(xiàn)了目的。

需求分析

剛進(jìn)公司產(chǎn)品提出一個需求:在全屏頁面中滾動鼠標(biāo)滾輪更新文本,回滾再恢復(fù)原文本,同時不影響全屏頁面的正常切換:

初始狀態(tài)

向下滾動鼠標(biāo)后出現(xiàn)新文本

看似一個非常簡單的需求,但因?yàn)檫@是一個使用了fullPage.js的全屏滾動頁面,默認(rèn)情況下滾動鼠標(biāo)滾輪整個全屏頁面也會隨之滾動,因此解決起來還是費(fèi)了一番功夫。

解決思路 引入jQuery 鼠標(biāo)滾輪插件 mousewheel

因?yàn)镕irefox在鼠標(biāo)滾輪滾動事件上使用的API是DOMMouseScroll而非其他主流瀏覽器使用的onmousewheel,因此首先引入一個jQuery插件mousewheel以添加跨瀏覽器鼠標(biāo)滾動事件的支持。

原始思路

一開始想到的方法是:當(dāng)頁面滾動到某一個頁面時,先屏蔽fullPage.js的默認(rèn)滾動觸發(fā),即把setAllowScrolling設(shè)置為false;每次手指滾動鼠標(biāo)滾輪,結(jié)合文本顯示的具體狀態(tài)和鼠標(biāo)滾輪滾動的方向再更改setAllowScrolling的值恢復(fù)整個頁面的滾動。例如,當(dāng)頁面滾動到如上圖1所示的頁面時,文本是默認(rèn)文本,此時應(yīng)實(shí)現(xiàn)向上滾動切換到上一頁,向下滾動切換文字;當(dāng)處于上圖2所示的頁面時,應(yīng)實(shí)現(xiàn)向上滾動切回原文字,向下滾動切換到下一頁??梢酝ㄟ^自定義變量isDefaultPara紀(jì)錄每次滾動鼠標(biāo)后,文本處于何種狀態(tài)。這種思路邏輯上是行的通的,但是存在兩個問題:一是沒有一個API可以反映用戶“滾動了一次滾輪”,通過mousewheel插件我們可以獲取的數(shù)據(jù)僅僅只有滾動的方向及滾動角度大?。欢?b>setAllowScrolling不能選擇性地屏蔽某一方向的滾動而只能全面禁止頁面滾動,因此無論如何都無法實(shí)現(xiàn)上述例子所要達(dá)到的效果。

改進(jìn)思路

查閱fullPage.js的官方文檔之后,發(fā)現(xiàn)該插件提供了一個moveTo(section, slide)的方法函數(shù),通過這個方法可以手動將屏幕滾動到某個section或者slide。由此,我們可以完全屏蔽fullPage.js的默認(rèn)滾動觸發(fā),改用moveTo方法控制全屏滾動,解除了全屏滾動與鼠標(biāo)滾輪事件的強(qiáng)耦合。此外,通過定時器延時1秒設(shè)置isDefaultPara的值,將用戶的鼠標(biāo)滾輪操作強(qiáng)制分為兩步,最終實(shí)現(xiàn)了目的。

具體代碼
        //在fullpage()方法中添加以下兩個回調(diào)函數(shù)
        afterRender: function(){
            //頁面載入后,禁止默認(rèn)的鼠標(biāo)滾輪滾動行為
            $.fn.fullpage.setAllowScrolling(false);
        },
        afterLoad: function(anchorLink, index){
            //此處只寫出滾動到第3屏的代碼,其他屏同理
            if (index == 3) {
                //判定默認(rèn)文檔顯示狀態(tài)并存入isDefaultPara變量
                var isDefaultPara = $(".default-para").is(":visible");
                $(".section").eq(2).mousewheel(function(event, delta, deltaX, deltaY){
                    switch (true) {
                        case delta<0 && isDefaultPara:
                            $(".default-para").hide().removeClass("bounceInRight");
                            $(".post-para").show().addClass("bounceInLeft");
                            //當(dāng)文本出現(xiàn)的動畫顯示完全(1s后)才能進(jìn)行下一步操作
                            setTimeout(function(){
                                defaultPara = false;
                            },1000);
                            break;
                        case delta>0 && isDefaultPara:
                            $.fn.fullpage.moveTo(2);
                            break;
                        case delta<0 && !isDefaultPara:
                            $.fn.fullpage.moveTo(4);
                            break;
                        case delta>0 && !isDefaultPara:
                            $(".post-para").hide().removeClass("bounceInLeft");
                            $(".default-para").show().addClass("bounceInRight");
                            setTimeout(function(){
                                firstPara = true;
                            },1000);
                        default:
                            return false;
          }

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78396.html

相關(guān)文章

  • 用 ES6 寫全屏滾動插件

    摘要:這篇文章將介紹如何使用原生主要使用語法實(shí)現(xiàn)全屏滾動插件,兼容手機(jī)觸屏,觸摸板優(yōu)化,支持自定義頁面動畫,壓縮后文件只有。 這篇文章將介紹如何使用原生 JS (主要使用 ES6 語法)實(shí)現(xiàn)全屏滾動插件,兼容 IE 10+、手機(jī)觸屏,Mac 觸摸板優(yōu)化,支持自定義頁面動畫,壓縮后 gzip 文件只有 2.15KB。完整源碼在這 pure-full-page,點(diǎn)這查看 demo。 1)前面的話...

    liuchengxu 評論0 收藏0
  • JavaScript 筆記 —— 鼠標(biāo)事件的瀏覽器差異

    摘要:本文總結(jié)一下,鼠標(biāo)事件在不同瀏覽器實(shí)現(xiàn)的差異。和相關(guān)元素差異和是級事件當(dāng)中的其中兩個事件。標(biāo)準(zhǔn)事件對象使用屬性來識別鼠標(biāo)按鍵。該事件當(dāng)中的值與事件對象當(dāng)中的作用相同。 鼠標(biāo)是我們在 PC 端瀏覽網(wǎng)頁時候最重要的交互工具,因此鼠標(biāo)事件也是 Web 開發(fā)當(dāng)中最常用的一類事件。然而,由于各種原因,不同廠商或者不同版本的瀏覽器之間對于鼠標(biāo)事件的實(shí)現(xiàn)也有所不同。本文總結(jié)一下,鼠標(biāo)事件在不同瀏覽器...

    haoguo 評論0 收藏0
  • AlloyTouch全屏滾動插件發(fā)布--30秒搞定順滑H5頁

    原文鏈接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先驗(yàn)貨 showImg(https://segmentfault.com/img/remote/1460000007885626?w=280&h=280); 插件代碼可以在這里找到。 注意,雖然是掃碼體驗(yàn),但是AlloyTouch.FullPag...

    _ivan 評論0 收藏0
  • 事件代理及常用的 HTML 事件

    摘要:之前總結(jié)了事件捕獲和冒泡以及阻止事件傳播,今天寫一下事件代理方面的總結(jié)事件之捕獲冒泡阻止事件傳播事件代理監(jiān)聽列表中多項(xiàng)時,實(shí)現(xiàn)點(diǎn)擊控制臺打印對應(yīng)文本,如下蘋果香蕉葡萄首先想到的對每一個進(jìn)行監(jiān)聽或者使用和的區(qū)別是屬性,是方法。 之前總結(jié)了事件捕獲和冒泡以及阻止事件傳播,今天寫一下事件代理方面的總結(jié)DOM 事件之捕獲、冒泡:阻止事件傳播: 事件代理 監(jiān)聽列表中多項(xiàng) li 時,實(shí)現(xiàn)點(diǎn)擊 li...

    xavier 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<