Прозрачный Nav Bar

Это то, что _mm_undefined_ps для (но это только на самом деле помогает коду с компилятором Intel. Другие компиляторы обычно относятся к нему аналогично _mm_setzero_ps).

И кроме того, вы хотите загрузить movsd два поплавка, которые нуль расширяют и ломают ложную зависимость от старого значения регистра, а не movlps, который сливается. (Если вы не строите жесткий старый 32-разрядный процессор с SSE1, но не SSE2, как и PIII, ваш код изначально был написан для.)

Чтобы перейти к double * и использовать _mm_load_sd. Вы не разыгрываете это самостоятельно, только через _mm_load_sd, поэтому я думаю, , это все еще 100-процентное строгое сглаживание. Тем не менее, это работает на современных компиляторах! Если это оказывается небезопасным, _mm_loadl_epi64 (movq) принимает аргумент __m128i const* (странно, потому что он загружает только младшие 64 бит, но это тип may_alias, который вы можете определенно использовать безопасно для чтения любого другого типа, например char*.)

static inline
__m128 stride_gather(float *src) {
    __m128 tmp1 = _mm_castpd_ps(_mm_load_sd((const double*)src));  // movsd
    tmp1 = _mm_loadh_pi(tmp1, (const __m64*)(src+4));              // movhps
    return tmp1;
}

gcc7 и позже использовать movq вместо movsd, что странно, но я думаю, что все в порядке. В худшем случае дополнительный цикл задержки задержки байпаса в качестве входа в movhps для некоторых старых процессоров, но не пропускная способность.

Другие 3 основных компилятора (clang / ICC / MSVC) все компилируют этот к ожидаемому movsd / movhps без ложной зависимости от старого значения xmm0. ( source + asm output в проводнике компилятора Godbolt .)

0
задан Ahmed Usama 17 January 2019 в 01:33
поделиться

2 ответа

http://jsfiddle.net/L561fzdj/

var x = document.getElementById("navy");
window.addEventListener("scroll", function(){
    if(window.pageYOffset >=100){
        x.classList.remove("transparent");
      x.classList.add("scrolled");
    }
    else{
      x.classList.add("transparent");
      x.classList.remove("scrolled");
    }
}, false)
0
ответ дан Patrik Alexits 17 January 2019 в 01:33
поделиться

Прежде всего, вы хотите, чтобы он был прозрачным, когда вы вернетесь к заголовку, чтобы ваши операторы if else уже были в неправильном порядке.

        if(document.body.scrollTop >= 200)
        {
            x.classList.add("scrolled") //when its >= 200 it means the user is 
            x.classList.remove("transparent") //scrolling downwards
        }
        else
        {

            x.classList.add("transparent") //so I swapped your classes for you
            x.classList.remove("scrolled")
        }

Во-вторых, document.body.scrollTop - это еще не все, что нужно для проверки позиций прокрутки пользователей, я обнаружил, что использование комбинации из нескольких команд, как в исходном тексте скроллера, работает для меня очень хорошо.

Skrollr.prototype.getScrollTop = function() {
        if(_isMobile) {
            return _mobileOffset;
        } else {
            return window.pageYOffset || documentElement.scrollTop || body.scrollTop 
                   || 0;
        }
    };

Вот ссылка на github в исходном коде: https://github.com/Prinzhorn/skrollr/blob/b98d40820b9864be275e81af382045d72cc5a08a/src/skrollr.js#L627

0
ответ дан boom 17 January 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: