2015-07-17 4 views
3

Я просто возился с этим модернизмом, чтобы узнать, как они проверяют, поддерживается ли определенное свойство CSS в браузере пользователя, в основном я просто хотел иметь небольшой скрипт, который сказал мне, браузер пользователя поддерживает переходы CSS. Я отведенной код Modernizr к чему-то, как показано ниже:Функция обнаружения для свойства перехода CSS3

Elem = document.createElement('Alx'); 
     eStyle = Elem.style; 

     var cssProp = (function check(){ 
      props = ["transition", "WebkitTransition", "MozTransition", "OTransition", "msTransition"]; 
      for(var i in props) { 
       var prop = props[i]; 
       console.log(prop); 
       if (!contains('-' , prop) && eStyle[prop] !== undefined) { 
         return prop; 
       } 
      } 
     })(); 

    /* The contains function */ 

    function contains(str, substr) { 
     return !!~('' + str).indexOf(substr); 
    } 

Modernizr делает почти то же самое, я только что сделал несколько изменений и жестко закодированы значения массива, чтобы упростить вещи. Скрипт работает следующим образом.

  • Создать элемент html (не обязательно должен быть действительным элементом html).

  • выполнить IIFE, который в основном проходит через все возможные версии браузера css, а также стандартный вариант W3C. проверьте, может ли свойство thing быть применено к элементу html, который мы создали, если он не может быть применен, условие if не выполняется и не определено

  • Если условие if прошло, возвращается правильное свойство css-3 и хранится в cssProps.

Я просто хотел знать, является ли это пуленепробивным способом проверки того, какой переход поддерживается в браузере пользователя? или если его поддержка вообще?

Это действительно моя первая попытка обнаружения функции браузера, и поэтому я хотел бы знать.

+1

Я не понимаю, почему вы не просто используете modernizr. Вы можете создать пользовательскую сборку, которая будет очень маленькой, и вам не придется беспокоиться о том, что вы сделали все правильно.Как бы то ни было, вы просите нас проверить код, который вы взломали из другого места, - если вы хотите узнать, работает ли он, тогда проверьте его самостоятельно. –

+1

Вы можете прокрутить собственный модернизатор, чтобы проверить конкретные вещи, например, просто переходы CSS3. Перейдите на страницу [download page] (http://modernizr.com/download/) и установите флажок только для перехода к CSS-переходу, а затем нажмите генерировать – zgood

+0

@torazaburo прямо вправо, но моя цель - научиться кодировать себя, а не просто использовать библиотеки, да, я прошу вас проверить мой код, но это не единственное, о чем я спрашиваю, и, наконец, каждый программист js, который кодов для Интернета, в какой-то момент хотел бы знать, как все работает внутри библиотеки. ваше решение использовать «использовать пользовательскую сборку» является хорошим, эффективным и определенным временем сбережения ... но «это не то, что я хочу, а определенно не подходит для каждого варианта использования». Надеюсь, я сделал оба намерения и четко сформулировал. спросите меня, есть ли у вас дополнительные трудности в понимании. –

ответ

2

К вашей большей точке «это пуленепробиваемый способ проверки того, какой переход поддерживается в браузере пользователя», ответ - нет. Хотя это почти наверняка даст вам 99,99% всех браузеров, которые его поддерживают, неизбежно будет какая-то причудливая комбинация вещей (веб-просмотр на устройстве Samsung для Android в середине диапазона, который использует custom version of webkit/chrome, является обычным преступником), который будет препятствовать вам действительно будучи «пуленепробиваемым».

Это, как говорится, в то время как вы отлично справились с логикой того, что делает Modernizr, я бы поставил под сомнение вашу потребность в этом.

Как уже отмечали другие комментаторы, вы всегда можете создать пользовательскую сборку, которая имеет именно то, что вы хотите в ней. При этом было бы разумно делать то, что вы сделали, если хотите самую тонкую возможную сборку javascript (поскольку у Modernizr почти наверняка есть поддержка/код для вещей, которые совершенно не имеют отношения к тому, что вы делаете). Если это так, то я предлагаю вам проверить результаты caniuse для перехода. Его в основном все не имеет прецедента, за исключением старых Android.

Это означает, что ваши обнаружения может быть намного меньше

var supportsTransitions = function() { 
    var style = document.documentElement.style; 

    return 'transition' in style || 'webkitTransition' in style 
} 

это даст вам почти одинаковые результаты (по общему признанию, игнорируя старые браузеры - это до вас, если это имеет значение или нет) в гораздо меньшей площади ,

В любом случае - прекрасное начало при обнаружении функции, я надеюсь, что скоро вы вносите свой вклад в Modernizr!

+0

! Спасибо, ты отлично ответил на мой вопрос, я использовал modernizr какое-то время, и его очень полезно, мне нравится копать код и надеяться внести свой вклад очень скоро :) –

Смежные вопросы