亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教動畫滾動頂部無法在Firefox中工作

請教動畫滾動頂部無法在Firefox中工作

侃侃爾雅 2019-10-22 17:12:36
動畫滾動頂部無法在Firefox中工作這個函數工作得很好。它將身體滾動到所需容器的偏移量。function scrolear(destino){     var stop = $(destino).offset().top;     var delay = 1000;     $('body').animate({scrollTop: stop}, delay);     return false;}但在Firefox中并非如此。為什么?為了在接受的答案中處理de Double觸發器,我建議在動畫之前停止元素:$('body,html').stop(true,true).animate({scrollTop: stop}, delay);
查看完整描述

3 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

Firefox將溢出放置在html級別,除非有特殊的樣式來表現不同的行為。

若要使其在Firefox中工作,請使用

$('body,html').animate( ... );

工作實例

CSS解決方案是設置以下樣式:

html { overflow: hidden; height: 100%; }body { overflow: auto; height: 100%; }

我認為JS解決方案的侵入性最小。


更新

下面的許多討論集中在以下事實,即激活scrollTop其中兩個元素將導致調用兩次回調。瀏覽器檢測功能已經被建議并隨后被廢棄,有些功能可以說是遙不可及的。

如果回調是冪等的,并且不需要大量的計算能力,那么兩次觸發它可能是一個完全沒有問題的問題。如果回調的多次調用確實是一個問題,而且如果您希望避免特征檢測,則可能更直接地強制執行回調在回調中只運行一次:

function runOnce(fn) { 
    var count = 0; 
    return function() { 
        if(++count == 1)
            fn.apply(this, arguments);
    };};$('body, html').animate({ scrollTop: stop }, delay, runOnce(function() {
   console.log('scroll complete');}));



查看完整回答
反對 回復 2019-10-23
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

特征檢測,然后在一個受支持的對象上動畫將是很好的,但沒有一個一行的解決方案。同時,這里有一種方法可以使用承諾,在每次執行中執行一次回調。

$('html, body')
    .animate({ scrollTop: 100 })
    .promise()
    .then(function(){
        // callback code here
    })});

更新:下面是使用特性檢測的方法。這段代碼需要在動畫調用之前得到評估:

// Note that the DOM needs to be loaded first, // or else document.body will be undefinedfunction getScrollTopElement() {

    // if missing doctype (quirks mode) then will always use 'body'
    if ( document.compatMode !== 'CSS1Compat' ) return 'body';

    // if there's a doctype (and your page should)
    // most browsers will support the scrollTop property on EITHER html OR body
    // we'll have to do a quick test to detect which one...

    var html = document.documentElement;
    var body = document.body;

    // get our starting position. 
    // pageYOffset works for all browsers except IE8 and below
    var startingY = window.pageYOffset || body.scrollTop || html.scrollTop;

    // scroll the window down by 1px (scrollTo works in all browsers)
    var newY = startingY + 1;
    window.scrollTo(0, newY);

    // And check which property changed
    // FF and IE use only html. Safari uses only body.
    // Chrome has values for both, but says 
    // body.scrollTop is deprecated when in Strict mode.,
    // so let's check for html first.
    var element = ( html.scrollTop === newY ) ? 'html' : 'body';

    // now reset back to the starting position
    window.scrollTo(0, startingY);

    return element;}// store the element selector name in a global var -
    // we'll use this as the selector for our page scrolling animation.scrollTopElement = getScrollTopElement();

現在使用我們剛剛定義為頁面滾動動畫的選擇器的var,并使用常規語法:

$(scrollTopElement).animate({ scrollTop: 100 }, 500, function() {
    // normal callback});



查看完整回答
反對 回復 2019-10-23
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

我花了很長時間想弄明白為什么我的代碼不能工作-

$('body,html').animate({scrollTop: 50}, 500);

問題就在我的CSS里-

body { height: 100%};

我把它設置為auto相反(而讓人擔心的是,為什么它會被設置為100%首先)。幫我修好了。


查看完整回答
反對 回復 2019-10-23
  • 3 回答
  • 0 關注
  • 410 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號