Метод перекрестного браузера для обнаружения scrollTop окна браузера

Что лучший перекрестный браузер путь состоит в том, чтобы обнаружить scrollTop окна браузера? Я предпочитаю не пользоваться любыми предварительно созданными библиотеками кода, потому что это - очень простой сценарий, и мне не нужна вся та полная грузоподъемность судна.

1
задан 16 May 2009 в 05:01

11 ответов

Проблема была на самом деле конкретным яблоком и является известной проблемой с Ubuntu на MacBook.

Вот ресурс о том, как решить большинство проблем с под управлением Ubuntu на MacBook

Обходное решение для проблемы подсветки также там:

Взгляд на комментарий 78 этого отчета об ошибках

Patrik Jakobsson записал модуль ядра, который непосредственно программирует драйвер подсветки, и он работает!

Если Вы не хотите компилировать собой, выполните эти шаги.

  1. Основы Сборки установки и заголовки

    sudo apt-get install build-essential linux-headers-generic
    
  2. Загрузите mba6xbl-dkms_0.0.3_all.deb и установите его с

    sudo dpkg -i mba6xbl-dkms_0.0.3_all.deb Note: Repeat this installation step each time you kernel gets updated.
    
  3. Загрузите модуль:

    sudo modprobe mba6x_bl
    
  4. Выйдите из системы и войдите в. Это должно загрузиться автоматически на следующей начальной загрузке

Я не рекомендую загрузить (mba6xbl-dkms_0.0.3_all.deb), потому что он лично не работал на меня, попробуйте более новую версию: mba6xbl-dkms_1.0.0_all.deb

1
ответ дан 28 September 2019 в 02:43
  • 1
    Я только недавно установил 18.10 и добавил несколько PPAs, такие как LibreOffice новый PPA - у меня есть приблизительно 21% установленных пакетов, которые не поддерживаются! – Charles Green 11 November 2018 в 18:21

Если Вы не хотите включать целую библиотеку JavaScript, можно часто извлекать биты, которые Вы хотите от одного.

Например, это по существу, как jQuery реализует прокрутку перекрестного браузера (Top|Left):

function getScroll(method, element) {
  // The passed in `method` value should be 'Top' or 'Left'
  method = 'scroll' + method;
  return (element == window || element == document) ? (
    self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||
    (browserSupportsBoxModel && document.documentElement[method]) ||
    document.body[method]
  ) : element[method];
}
getScroll('Top', element);
getScroll('Left', element);

Примечание: Вы заметите, что вышеупомянутый код содержит a browserSupportsBoxModel переменная, которая является неопределенной. jQuery определяет это путем временного добавления отделения к странице и затем измерения некоторых атрибутов, чтобы определить, реализует ли браузер правильно модель поля. Поскольку можно вообразить этот флаг проверками на IE. А именно, это проверяет на IE 6 или 7 в режиме причуд. Так как обнаружение довольно сложно, я оставил его как осуществление для Вас ;-), предположив, что Вы уже использовали браузер функция обнаружение в другом месте в Вашем коде.

Править: Если Вы уже не предположили, я настоятельно рекомендую, чтобы Вы пользовались библиотекой для этих видов вещей. Издержки являются маленькой ценой для оплаты за устойчивый и соответствующий требованиям завтрашнего дня код, и любой был бы намного более продуктивным с платформой перекрестного браузера для здания. (В противоположность пребыванию в течение бесчисленных часов, ударяя Вашей головой о IE).

13
ответ дан 31 October 2019 в 03:45

Я думаю, что Вы сделали USB загрузочным использованием Создатель LiveUSB или Rufus. Если так, Ваш USB является загрузочным.

Ваш USB не загружается при перезапуске компьютера, потому что Карта памяти будет ниже жесткого диска в порядке загрузки. Так Ваш, жесткий диск на самом деле загружается сначала, и Вы не можете загрузиться от USB.

Поэтому, когда Ваш компьютер преуспевает, на самом деле на первом экране начальной загрузки, нажатие (F8, F10, F12..). Любой эти ключи посадит Вас на странице меню начальной загрузки и выберет Вашу Карту памяти с помощью клавиш со стрелками и затем нажмет Enter.

Вы могли изменить порядок загрузки постоянно путем нажатия клавиши, требуемой для приземления Вас к опциям BIOS. Это мог бы быть F2.

Для получения ключа относительно меню начальной загрузки, Вы могли искать свою аппаратную страницу (Motherboard) в сети.

-3
ответ дан 31 October 2019 в 13:45
  • 1
    Используя find хороший способ найти файлы в подкаталогах, и с -exec опция, это возможно к командам выполнения с параметрами {}. Каждый файл, найденный find, будет заменять spaceholder {}, таким образом, в Вашем случае sha256sum будет работать над каждым из файлов один за другим. – sudodus 9 November 2018 в 11:53

Никакая потребность дополнительная библиотека, используйте этот отрывок:

const scrollTop = 
    (window.pageYOffset !== undefined) ? 
     window.pageYOffset :
    (document.documentElement || document.body.parentNode || document.body).scrollTop;
0
ответ дан 31 October 2019 в 13:45

Я полагаю, что лучший способ получить scrollTop в современных браузерах состоит в том, чтобы использовать

const scrollTop = document.scrollingElement.scrollTop

, если это не работает, Вы могли бы также попробовать

const scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop, document.scrollingElement.scrollTop)
0
ответ дан 31 October 2019 в 13:45

Это работает хорошо от IE5 до IE11. Это также поддерживает все главные новые браузеры.

var scrollTop = (document.documentElement && document.documentElement.scrollTop) ||
                (document.body.scrollTop) || (document.scrollingElement);
0
ответ дан 31 October 2019 в 13:45

Я использовал window.scrollY || document.documentElement.scrollTop.

window.scrollY покрытия все браузеры кроме IES.
document.documentElement.scrollTop покрытия IE.

7
ответ дан 31 October 2019 в 13:45

Я знаю его долгое время, так как этот поток был обновлен, но это - функция, которую я создал, который позволяет разработчикам находить корневой элемент, который на самом деле размещает, имеет работу "scrollTop" свойство. Протестированный на Chrome 42 и Firefox 37 для Mac OS X (10.9.5):

function getScrollRoot(){
    var html = document.documentElement, body = document.body,
        cacheTop = ((typeof window.pageYOffset !== "undefined") ? window.pageYOffset : null) || body.scrollTop || html.scrollTop, // cache the window's current scroll position
        root;

    html.scrollTop = body.scrollTop = cacheTop + (cacheTop > 0) ? -1 : 1;
    // find root by checking which scrollTop has a value larger than the cache.
    root = (html.scrollTop !== cacheTop) ? html : body;

    root.scrollTop = cacheTop; // restore the window's scroll position to cached value

    return root; // return the scrolling root element
}

// USAGE: when page is ready: create a global variable that calls this function.

var scrollRoot = getScrollRoot();

scrollRoot.scrollTop = 10; // set the scroll position to 10 pixels from the top
scrollRoot.scrollTop = 0; // set the scroll position to the top of the window

я надеюсь, что Вы находите это полезным! Аплодисменты.

1
ответ дан 31 October 2019 в 13:45
function getSize(method) {
  return document.documentElement[method] || document.body[method];
}
getSize("scrollTop");
5
ответ дан 31 October 2019 в 13:45

Или просто простой как:

var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
21
ответ дан 31 October 2019 в 13:45

YUI 2.8.1 код делает это:

function getDocumentScrollTop(doc) 
{
   doc = doc || document;

   //doc.body.scrollTop is IE quirkmode only
   return Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
}

я думаю jQuery 1.4.2 код (немного переведенный для людей) и предположение, что я понял, что он правильно делает это:

function getDocumentScrollTop(doc) 
{
   doc = doc || document;
   win = doc.defaultView || doc.parentWindow; //parentWindow is for IE < 9

   result = 0;
   if("pageYOffset" in win) //I'don't know why they use this, probably they tested it to be faster than doing: if(typeof win.pageYOffset !== 'undefined')
      result = win.pageYOffset;
   else
      result = (jQuery.support.boxModel && document.documentElement.scrollTop) || 
               document.body.scrollTop;

   return result;
}

Unfortunatley, извлекающий значение jQuery.support.boxModel, почти невозможен, потому что необходимо было бы добавить временный дочерний элемент в документ и сделать те же тесты, которые делает jQuery.

2
ответ дан 31 October 2019 в 13:45

Другие вопросы по тегам:

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