Как проверить, помещает ли браузер переполнение в «html» или «body»?

#javascript #jquery #firefox #jquery-plugins #webkit

#javascript #jquery #firefox #jquery-плагины #webkit

Вопрос:

Я обнаружил, что браузеры webkit помещают переполнение на уровень «body», в то время как остальные делают это на уровне «html». Как мне отличить использование javascript или jquery? Я хочу использовать animate({scrollTop: …}, …), но не хочу использовать «body, html или stop (true, true). Что я могу сделать, кроме этого? Было бы здорово, если бы был какой-либо способ дифференцировать в зависимости от браузера.

Комментарии:

1. Можете ли вы указать на тестовый пример, который показывает разницу в поведении, о которой вы говорите? Это помогло бы выяснить, как лучше всего его обнаружить…

2. Это так.. Я должен использовать $(«body»).animate для webkit и $(«html»).animate для others….so что я могу анимировать свойство scrollTop, как мне это сделать?

3. Я вижу. Похоже, WebKit не реализует dev.w3.org/csswg/cssom-view/#dom-element-scrolltop правильно. Что произойдет, если вы просто анимируете это на обоих <html> и <body> ? Если у вас нет явного стиля переполнения в теле, это должно работать нормально.

Ответ №1:

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

это код, который я получил из Интернета, который точно различает браузеры.

 var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
         // Opera 8.0  (UA detection to detect Blink/v8-powered Opera)
var isFirefox = typeof InstallTrigger !== 'undefined';   // Firefox 1.0 
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
      // At least Safari 3 : "[object HTMLElementConstructor]"
var isChrome = !!window.chrome amp;amp; !isOpera;              // Chrome 1 
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6


if(isFirefox){
    //do the change
} else if (isChrome){
    //do the change
}
 

Комментарии:

1. Поскольку спецификация фактически описывает поведение, предположительно, в одном из браузеров есть ошибка. Но если вы напишете код так, как вы предлагаете, он сломается, когда ошибка будет исправлена….