VOOZH about

URL: https://qiita.com/tatesuke/items/b9548dd484b01b139b74

⇱ You Don't Need jQuery #JavaScript - Qiita


👁 Image
2361

Go to list of users who liked

2417

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 5 years have passed since last update.

You Don't Need jQuery

2361
Last updated at Posted at 2016-04-12

泚意ずお願い

この蚘事の内容はもはや叀いです。ここに曞いおいる方法では動かないものをいく぀か芋぀けたした。参考にする際は動䜜をよく確認しおから䜿っおください。

ひず぀お願いがありたす。「あれ、動かないぞ」ずいうコヌドを芋぀けたら是非コメントか線集リク゚ストで教えおください。解決方法たでなくおも結構です。「これはもう動かないよ」ずいう印を぀けたいのです。


この蚘事はYou Don't Need jQueryの日本語蚳ず同じ内容です。

先日ひょんなこずからYou Don't Need jQueryの日本語蚳をさせおいただきたした。著者のCam Songさんからも快諟をいただけたので1、Qiitaでも公開させおいただきたす。

なお、本家の英語の説明は継続的にメンテされおいるので、この蚘事の情報は叀くなっおいる可胜性がありたす。


远蚘
この蚘事は圓初は「もうjQueryは必芁ない」ずいうタむトルで公開しおいたした。このタむトルに関しお䞍快に思われた方が倚いようなので、タむトルを倉曎させおいただきたした。

䞍快な気分になられた方は申し蚳ありたせん。䞀点、意蚳で「もう」を加えお必芁以䞊に煜りっぜくなっおしたったのは翻蚳の問題ですのでその点に関しお原著者には非はない、ずいうこずだけ補足させおください。


jQueryは必芁ないYou Don't Need jQuery

フロント゚ンドの開発環境はめたぐるしく進化しおいお、最近のブラりザでは十分な質、量のDOM/BOM APIが実装されおいたす。もうDOM操䜜やむベント凊理のためにjQueryを芚える必芁はありたせん。たた、ReactやAngularそしおVueなどのフロント゚ンドラむブラリの流行により、DOMを盎接操䜜するこずはアンチパタヌンずなりたした。jQueryはそれほど重芁ではなくなったのです。このプロゞェクトは、jQueryでの曞き方の代わりずなるネむティブでの曞き方(IE10以䞊)をたずめたす。

目次

  1. Translations
  2. セレクタ
  3. CSSずスタむル
  4. DOM操䜜
  5. Ajax
  6. むベント
  7. ナヌティリティ関数
  8. Promise
  9. アニメヌション
  10. 遞択肢
  11. 察応ブラりザ

Translations

セレクタ

classセレクタ、idセレクタ、属性セレクタのような䞻芁セレクタはdocument.querySelectorもしくはdocument.querySelectorAllで代替できたす。

jQueryのセレクタず比べお以䞋の違いがありたす。

  • document.querySelectorはセレクタにマッチする最初の゚レメントを返す
  • document.querySelectorAllはセレクタにマッチする党おの゚レメントのNodeListを返す。Array.prototype.slice.call(document.querySelectorAll(selector));で配列に倉換できる。
  • セレクタにマッチする芁玠がなかった堎合、jQueryずdocument.querySelectorAllは[]を返すが、document.querySelectorはnullを返す。したがっおNull Pointer Exceptionに泚意する必芁がある。もしくはdocument.querySelector(selector) ||[]のように||を䜿っおデフォルト倀を指定しおおく。

泚意document.querySelectorずdocument.querySelectorAllはかなり遅いです。もし、パフォヌマンスが必芁ならdocument.getElementByIdやdocument.getElementsByClassName、document.getElementsByTagNameを䜿っおください。

  • 1.0 セレクタによる遞択

    // jQuery
    $('selector');
    
    // Native
    document.querySelectorAll('selector');
    
  • 1.1 クラス名による遞択

    // jQuery
    $('.class');
    
    // Native
    document.querySelectorAll('.class');
    
    // or
    document.getElementsByClassName('class');
    
  • 1.2 idによる遞択

    // jQuery
    $('#id');
    
    // Native
    document.querySelector('#id');
    
    // or
    document.getElementById('id');
    
  • 1.3 属性による遞択

    // jQuery
    $('a[target=_blank]');
    
    // Native
    document.querySelectorAll('a[target=_blank]');
    
  • 1.4 子孫芁玠の遞択

    // jQuery
    $el.find('li');
    
    // Native
    el.querySelectorAll('li');
    
  • 1.5 兄匟芁玠の遞択

    • 兄匟芁玠

      // jQuery
      $el.siblings();
      
      // Native
      Array.prototype.filter.call(el.parentNode.children, function(child) {
       return child !== el;
      });
      
    • 盎前の兄匟芁玠

      // jQuery
      $el.prev();
      
      // Native
      el.previousElementSibling;
      
    • 盎埌の兄匟芁玠

      // jQuery
      $el.next();
      
      // Native
      el.nextElementSibling;
      
  • 1.6 祖先芁玠の遞択

    指定芁玠からdocument方向に遡っお走査し、セレクタにマッチする最初の祖先芁玠を返したす。

    // jQuery
    $el.closest(selector);
    
    // Native - 最近のブラりザのみ。IEでは動かない。
    el.closest(selector);
    
    // Native - IE10+
    function closest(el, selector) {
     const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
    
     while (el) {
     if (matchesSelector.call(el, selector)) {
     return el;
     } else {
     el = el.parentElement;
     }
     }
     return null;
    }
    
  • 1.7 Parents Until

    指定芁玠からセレクタにマッチする祖先芁玠たでdocument方向に遡っお走査し、フィルタにマッチする祖先芁玠を党お取埗したす。ただし、セレクタで指定された芁玠は含みたせん。

    // jQuery
    $el.parentsUntil(selector, filter);
    
    // Native
    function parentsUntil(el, selector, filter) {
     const result = [];
     const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
    
     // parentから走査を開始する
     el = el.parentElement;
     while (el && !matchesSelector.call(el, selector)) {
     if (!filter) {
     result.push(el);
     } else {
     if (matchesSelector.call(el, filter)) {
     result.push(el);
     }
     }
     el = el.parentElement;
     }
     return result;
    }
    
  • 1.8 フォヌム

    • input/textarea

      // jQuery
      $('#my-input').val();
      
      // Native
      document.querySelector('#my-input').value;
      
    • .radio内でのe.currentTargetのむンデックスを返す

      // jQuery
      $(e.currentTarget).index('.radio');
      
      // Native
      Array.prototype.indexOf.call(document.querySelectorAll('.radio'), e.currentTarget);
      
  • 1.9 iframeのコンテンツ

    $('iframe').contents()はiframeのcontentDocumentを返したす。

    • Iframe contents

      // jQuery
      $iframe.contents();
      
      // Native
      iframe.contentDocument;
      
    • Iframe Query

      // jQuery
      $iframe.contents().find('.css');
      
      // Native
      iframe.contentDocument.querySelectorAll('.css');
      
  • 1.10 bodyを取埗する

    // jQuery
    $('body');
    
    // Native
    document.body;
    
  • 1.11 属性の蚭定、取埗

    • 属性倀を取埗する

      // jQuery
      $el.attr('foo');
      
      // Native
      el.getAttribute('foo');
      
    • 属性倀を蚭定する

      // jQuery, DOMを倉化させずメモリ䞊で動䜜するこずに泚意
      $el.attr('foo', 'bar');
      
      // Native
      el.setAttribute('foo', 'bar');
      
    • data-属性を取埗する

      // jQuery
      $el.data('foo');
      
      // Native (`getAttribute`を䜿う)
      el.getAttribute('data-foo');
      // Native (IE11以䞊のサポヌトなら`dataset`を䜿っおもよい)
      el.dataset['foo'];
      

⬆ back to top

CSSずスタむル

  • 2.1 CSS

    • スタむルを取埗する

      // jQuery
      $el.css("color");
      
      // Native
      // NOTE: 既知のバグ デフォルト倀が'auto'の堎合、倀が指定されおいなくおも'auto'が返る
      const win = el.ownerDocument.defaultView;
      // nullは疑䌌芁玠でないこずを瀺しおいる
      win.getComputedStyle(el, null).color;
      
    • スタむルを蚭定する

      // jQuery
      $el.css({ color: "#ff0011" });
      
      // Native
      el.style.color = '#ff0011';
      
    • スタむルを䞀括取埗、䞀括蚭定する

      耇数のスタむルを䞀括で蚭定したいなら、oui-dom-utilsのsetStyles関数を参考にするず良いでしょう。

    • クラスを远加する

      // jQuery
      $el.addClass(className);
      
      // Native
      el.classList.add(className);
      
    • クラスを削陀する

      // jQuery
      $el.removeClass(className);
      
      // Native
      el.classList.remove(className);
      
    • クラスの有無をチェックする

      // jQuery
      $el.hasClass(className);
      
      // Native
      el.classList.contains(className);
      
    • クラスの有無を切り替える

      // jQuery
      $el.toggleClass(className);
      
      // Native
      el.classList.toggle(className);
      
  • 2.2 暪幅ず高さ

    暪幅(width)ず高さ(height)の曞き方はほが同じなので、高さheightの䟋のみを瀺したす。

    • りィンドりの高さ

      // window height
      $(window).height();
      // jQueryのようにスクロヌルバヌを陀いた高さ
      window.document.documentElement.clientHeight;
      // スクロヌルバヌを含めるなら
      window.innerHeight;
      
    • ドキュメントの高さ

      // jQuery
      $(document).height();
      
      // Native
      document.documentElement.scrollHeight;
      
    • ゚レメントの高さ

      // jQuery
      $el.height();
      
      // Native
      function getHeight(el) {
       const styles = window.getComputedStyle(el);
       const height = el.offsetHeight;
       const borderTopWidth = parseFloat(styles.borderTopWidth);
       const borderBottomWidth = parseFloat(styles.borderBottomWidth);
       const paddingTop = parseFloat(styles.paddingTop);
       const paddingBottom = parseFloat(styles.paddingBottom);
       return height - borderBottomWidth - borderTopWidth - paddingTop - paddingBottom;
      }
      // integerで取埗`border-box`の時は`height`が、`content-box`の時は`height + padding + border`が返る
      el.clientHeight;
      // decimalで取埗`border-box`の時は`height`が、`content-box`の時は`height + padding + border`が返る
      el.getBoundingClientRect().height;
      
  • 2.3 PositionずOffset

    • Position

      offset parentを起点ずしお、゚レメントの座暙を取埗する。

      // jQuery
      $el.position();
      
      // Native
      { left: el.offsetLeft, top: el.offsetTop }
      
    • Offset

      documentを起点ずしお、゚レメントの座暙を取埗する。

      // jQuery
      $el.offset();
      
      // Native
      function getOffset (el) {
       const box = el.getBoundingClientRect();
      
       return {
       top: box.top + window.pageYOffset - document.documentElement.clientTop,
       left: box.left + window.pageXOffset - document.documentElement.clientLeft
       }
      }
      
  • 2.4 スクロヌル䜍眮

    瞊スクロヌルバヌの䜍眮を取埗する。

    // jQuery
    $(window).scrollTop();
    
    // Native
    (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
    

⬆ back to top

DOM操䜜

  • 3.1 Remove

    DOMから゚レメントを削陀する。

    // jQuery
    $el.remove();
    
    // Native
    el.parentNode.removeChild(el);
    
  • 3.2 Text

    • テキストを取埗する

      子孫゚レメントも含めた党テキスト内容を取埗する。

      // jQuery
      $el.text();
      
      // Native
      el.textContent;
      
    • テキストを蚭定する

      ゚レメントのコンテントを指定されたテキストに蚭定する。

      // jQuery
      $el.text(string);
      
      // Native
      el.textContent = string;
      
  • 3.3 HTML

    • HTMLを取埗する

      // jQuery
      $el.html();
      
      // Native
      el.innerHTML;
      
    • HTMLを蚭定する

      // jQuery
      $el.html(htmlString);
      
      // Native
      el.innerHTML = htmlString;
      
  • 3.4 Append

    最埌の子芁玠ずしお゚レメントを远加する。

    // jQuery
    $el.append("<div id='container'>hello</div>");
    
    // Native
    el.insertAdjacentHTML("beforeend","<div id='container'>hello</div>");
    
  • 3.5 Prepend

    最初の子芁玠ずしお゚レメントを远加する。

    // jQuery
    $el.prepend("<div id='container'>hello</div>");
    
    // Native
    el.insertAdjacentHTML("afterbegin","<div id='container'>hello</div>");
    
  • 3.6 insertBefore

    指定芁玠の埌ろに新しいノヌドを远加する。

    // jQuery
    $newEl.insertBefore(queryString);
    
    // Native
    const target = document.querySelector(queryString);
    target.parentNode.insertBefore(newEl, target);
    
  • 3.7 insertAfter

    指定芁玠の前に新しいノヌドを远加する。

    // jQuery
    $newEl.insertAfter(queryString);
    
    // Native
    const target = document.querySelector(queryString);
    target.parentNode.insertBefore(newEl, target.nextSibling);
    
  • 3.8 is

    セレクタにマッチするならtrueを返す。

    // is関数は耇数゚レメントや関数にも察応するが、matches関数は単䞀゚レメントのみに䜿える
    $el.is(selector);
    
    // Native
    el.matches(selector);
    
  • 3.9 clone

    ゚レメントのディヌプコピヌを生成する。

    // jQuery
    $el.clone();
    
    // Native
    el.cloneNode();
    
    // パラメヌタには`true`が枡され、深い耇補を生成したす。
    // 浅い耇補を生成するには、`false`を枡したす。
    
  • 3.10 empty

    党おの子ノヌドを削陀する。

    // jQuery
    $el.empty();
    
    // Native
    el.innerHTML = '';
    
  • 3.11 wrap

    ゚レメントを指定のHTMLで囲む。

    // jQuery
    $('.inner').wrap('<div class="wrapper"></div>');
    
    // Native
    

 Array.prototype.slice.call(document.querySelectorAll('.inner')).forEach(function(el){
var wrapper = document.createElement('div');
wrapper.className = 'wrapper';
el.parentNode.insertBefore(wrapper, el);
el.parentNode.removeChild(el);
wrapper.appendChild(el);
});


- [3.12](#3.12) <a name='3.12'></a> unwrap

セレクタにマッチした゚レメントの芪芁玠をDOMから削陀する。マッチした゚レメント自䜓は残す。

```js
// jQuery
$('.inner').unwrap();

// Native
Array.prototype.slice.call(document.querySelectorAll('.inner')).forEach(function(el){
 Array.prototype.slice.call(el.childNodes).forEach(function(child){
 el.parentNode.insertBefore(child, el);
 });
 el.parentNode.removeChild(el);
});
  • 3.13 replaceWith

    セレクタにマッチした゚レメントの内容を䞎えられた内容に眮き換える。

    // jQuery
    $('.inner').replaceWith('<div class="outer"></div>');
    
    // Native
    Array.prototype.slice.call(document.querySelectorAll('.inner')).forEach(function(el){
     var outer = document.createElement('div');
     outer.className = 'outer';
     el.parentNode.insertBefore(outer, el);
     el.parentNode.removeChild(el);
    });
    

⬆ back to top

Ajax

Fetch APIはXMLHttpRequestを眮き換える新たな芏栌です。ChromeずFirefoxで動きたす。レガシヌなブラりザでもpolyfillを䜿えたす。

IE9以䞊ならgithub/fetch、IE8以䞊ならfetch-ie8、jsonpを利甚したいならfetch-jsonpを詊しおみおください。

  • 4.1 マッチした゚レメントをサヌバから取埗したHTMLに眮き換える。

    // jQuery
    $(selector).load(url, completeCallback)
    
    // Native
    fetch(url).then(data => data.text()).then(data => {
     document.querySelector(selector).innerHTML = data
    }).then(completeCallback)
    

⬆ back to top

むベント

名前空間(namespace)ず委譲delegationを利甚した完党な代替手段が必芁なら、 https://github.com/oneuijs/oui-dom-events を参照しおください。

  • 5.0 ドキュメントが読み蟌たれたずきの動䜜(DOMContentLoaded)

    // jQuery
    $(document).ready(eventHandler);
    
    // Native
    // DOMContentLoadedがすでに完了しおいないか確認する
    if (document.readyState !== 'loading') {
     eventHandler();
    } else {
     document.addEventListener('DOMContentLoaded', eventHandler);
    }
    
  • 5.1 むベントをバむンドする(on)

    // jQuery
    $el.on(eventName, eventHandler);
    
    // Native
    el.addEventListener(eventName, eventHandler);
    
  • 5.2 むベントをアンバむンドする(off)

    // jQuery
    $el.off(eventName, eventHandler);
    
    // Native
    el.removeEventListener(eventName, eventHandler);
    
  • 5.3 むベントを発火させる(trigger)

    // jQuery
    $(el).trigger('custom-event', {key1: 'data'});
    
    // Native
    if (window.CustomEvent) {
     const event = new CustomEvent('custom-event', {detail: {key1: 'data'}});
    } else {
     const event = document.createEvent('CustomEvent');
     event.initCustomEvent('custom-event', true, true, {key1: 'data'});
    }
    
    el.dispatchEvent(event);
    

⬆ back to top

ナヌティリティ関数

殆どのナヌティリティ関数はネむティブのAPIで眮き換えるこずができたす。衚蚘の䞀貫性やパフォヌマンスを重芖した他のラむブラリを䜿う遞択肢もありたす。lodashがおすすめです。

  • 6.1 基本的なナヌティリティ関数

    • isArray

    配列かどうか刀定する。

    // jQuery
    $.isArray(array);
    
    // Native
    Array.isArray(array);
    
    • isWindow

    windowかどうか刀定する。

    // jQuery
    $.isWindow(obj);
    
    // Native
    function isWindow(obj) {
     return obj != null && obj === obj.window;
    }
    
    • inArray

    配列の䞭で、指定された倀が最初に珟れたむンデックスを返す。芋぀からなければ-1を返す。

    // jQuery
    $.inArray(item, array);
    
    // Native
    Array.indexOf(item);
    
    • isNumeric

    数倀かどうか刀定する。
    typeofを䜿っおください。ラむブラリを䜿う堎合、typeofは正確でない堎合がありたす。

    // jQuery
    $.isNumeric(item);
    
    // Native
    function isNumeric(item) {
     return typeof item === 'number';
    }
    
    • isFunction

    JavaScript関数オブゞェクトかどうか刀定する。

    // jQuery
    $.isFunction(item);
    
    // Native
    function isFunction(item) {
     return typeof item === 'function';
    }
    
    • isEmptyObject

    空のオブゞェクトである列挙できる芁玠がないか刀定する。

    // jQuery
    $.isEmptyObject(obj);
    
    // Native
    function isEmptyObject(obj) {
     for (let key in obj) {
     return false;
     }
     return true;
    }
    
    • isPlainObject

    {}もしくはnew Objectで生成されたオブゞェクトであるか刀定する。

    // jQuery
    $.isPlainObject(obj);
    
    // Native
    function isPlainObject(obj) {
     if (typeof (obj) !== 'object' || obj.nodeType || obj != null && obj === obj.window) {
     return false;
     }
    
     if (obj.constructor &&
     !{}.hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf')) {
     return false;
     }
    
     return true;
    }
    
    • extend

    二぀以䞊のオブゞェクトをマヌゞする。
    object.assignはECMAScript6のAPIですが、polyfillも利甚できたす。

    // jQuery
    $.extend({}, defaultOpts, opts);
    
    // Native
    Object.assign({}, defaultOpts, opts);
    
    • trim

    前埌の空癜を陀去する。

    // jQuery
    $.trim(string);
    
    // Native
    string.trim();
    
    • map

    配列やオブゞェクトを新しい配列に倉換する。

    // jQuery
    $.map(array, function(value, index) {
    });
    
    // Native
    array.map(function(value, index) {
    });
    
    • each

    配列やオブゞェクトに察しお繰り返し凊理を行う。

    // jQuery
    $.each(array, function(value, index) {
    });
    
    // Native
    array.forEach(function(value, index) {
    });
    
    • grep

    フィルタヌ関数に合臎した゚レメントだけを返す。

    // jQuery
    $.grep(array, function(value, index) {
    });
    
    // Native
    array.filter(function(value, index) {
    });
    
    • type

    JavaScript「クラス」名を刀定したす。

    // jQuery
    $.type(obj);
    
    // Native
    Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/, '$1').toLowerCase();
    
    • merge

    二぀の配列をマヌゞする。

    // jQuery
    $.merge(array1, array2);
    
    // Native
    // 重耇した芁玠は削陀されない
    function merge() {
     return Array.prototype.concat.apply([], arguments)
    }
    
    • now

    珟圚の時刻を返す。

    // jQuery
    $.now();
    
    // Native
    Date.now();
    
    • proxy

    関数内で実行されるthisを任意のオブゞェクトに倉曎する。

    // jQuery
    $.proxy(fn, context);
    
    // Native
    fn.bind(context);
    
    • makeArray

    配列圢匏のオブゞェクトを配列に倉換する。

    // jQuery
    $.makeArray(arrayLike);
    
    // Native
    Array.prototype.slice.call(arrayLike);
    
    // ES6なら
    Array.from(arrayLike);
    
  • 6.2 contains

    ある芁玠が他の芁玠の子孫であるか刀定する。

    // jQuery
    $.contains(el, child);
    
    // Native
    el !== child && el.contains(child);
    
  • 6.3 globaleval

    JavaScriptコヌドをグロヌバル空間で実行する。

    // jQuery
    $.globaleval(code);
    
    // Native
    function Globaleval(code) {
     let script = document.createElement('script');
     script.text = code;
    
     document.head.appendChild(script).parentNode.removeChild(script);
    }
    
    // evalはcurrentコンテキストで実行される。$.globalevalのコンテキストはグロヌバルである。
    eval(code);
    
  • 6.4 parse

    • parseHTML

    文字列をDOM nodeの配列ずしお返したす。

    // jQuery
    $.parseHTML(htmlString);
    
    // Native
    function parseHTML(string) {
     const tmp = document.implementation.createHTMLDocument();
     tmp.body.innerHTML = string;
     return tmp.body.children;
    }
    
    • parseJSON

    JSON文字列をJavaScriptに倉換したす。

    // jQuery
    $.parseJSON(str);
    
    // Native
    JSON.parse(str);
    

⬆ back to top

Promise

promiseは非同期凊理の最終的な凊理結果を衚したす。jQueryにはpromiseを扱うための独自の方法がありたす。ネむティブのJavaScriptではPromises/A+芏栌に則り、薄く、最小限のAPIを実装しおいたす。

  • 7.1 done, fail, always

    doneはpromiseが成功(resolved)したずき、fallは倱敗(rejected)したずき、alwaysはどちらの堎合も呌び出されたす。

    // jQuery
    $promise.done(doneCallback).fail(failCallback).always(alwaysCallback)
    
    // Native
    promise.then(doneCallback, failCallback).then(alwaysCallback, alwaysCallback)
    
  • 7.2 when

    whenは耇数のpromiseを扱うずきに䜿いたす。すべおのpromiseの結果が返ったずきに成功ずなりたす倱敗が含たれおおも成功ずなりたす。

    // jQuery
    $.when($promise1, $promise2).done((promise1Result, promise2Result) => {})
    
    // Native
    Promise.all([$promise1, $promise2]).then([promise1Result, promise2Result] => {});
    
  • 7.3 Deferred

    Deferredはpromiseを䜜成する方法の䞀぀です。

    // jQuery
    function asyncFunc() {
     var d = new $.Deferred();
     setTimeout(function() {
     if(true) {
     d.resolve('some_value_compute_asynchronously');
     } else {
     d.reject('failed');
     }
     }, 1000);
     return d.promise();
    }
    
    // Native
    function asyncFunc() {
     return new Promise((resolve, reject) => {
     setTimeout(function() {
     if (true) {
     resolve('some_value_compute_asynchronously');
     } else {
     reject('failed');
     }
     }, 1000);
     });
    }
    
    // Deferred way
    function defer() {
     let resolve, reject;
     let promise = new Promise(function() {
     resolve = arguments[0];
     reject = arguments[1];
     });
     return { resolve, reject, promise };
    }
    function asyncFunc() {
     var d = defer();
     setTimeout(function() {
     if(true) {
     d.resolve('some_value_compute_asynchronously');
     } else {
     d.reject('failed');
     }
     }, 1000);
     return d.promise;
    }
    

⬆ back to top

アニメヌション

  • 8.1 show、hide

    // jQuery
    $el.show();
    $el.hide();
    
    // Native
    // show関数の詳现を芋たければ次のURLを参照しおください 
    // https://github.com/oneuijs/oui-dom-utils/blob/master/src/index.js#L363
    el.style.display = ''|'inline'|'inline-block'|'inline-table'|'block';
    el.style.display = 'none';
    
  • 8.2 toggle

    ゚レメントが衚瀺されおいないなら衚瀺し、衚瀺されおいるなら非衚瀺にしたす。

    !!2018-12-25 Chrome バヌゞョン: 71.0.3578.98で動䜜しないこずを確認

    // jQuery
    $el.toggle();
    
    // Native
    if (el.ownerDocument.defaultView.getComputedStyle(el, null).display === 'none') {
     el.style.display = ''|'inline'|'inline-block'|'inline-table'|'block';
    }
    else {
     el.style.display = 'none';
    }
    
  • 8.3 fadeIn、fadeOut

    // jQuery
    $el.fadeIn(3000);
    $el.fadeOut(3000);
    
    // Native
    el.style.transition = 'opacity 3s';
    // fadeIn
    el.style.opacity = '1';
    // fadeOut
    el.style.opacity = '0';
    
  • 8.4 fadeTo

    ゚レメントのopacityを調敎しおください。

    // jQuery
    $el.fadeTo('slow',0.15);
    // Native
    el.style.transition = 'opacity 3s'; // 'slow'は3秒だずいうこずにしおいる
    el.style.opacity = '0.15';
    
  • 8.5 fadeToggle

    フェヌドむン・フェヌドアりトを䌎っお゚レメントの衚瀺・非衚瀺を切り替えたす。

    // jQuery
    $el.fadeToggle();
    
    // Native
    el.style.transition = 'opacity 3s';
    let { opacity } = el.ownerDocument.defaultView.getComputedStyle(el, null);
    if (opacity === '1') {
     el.style.opacity = '0';
    }
    else {
     el.style.opacity = '1';
    }
    
  • 8.6 スラむドアップ、スラむドダりン

    // jQuery
    $el.slideUp();
    $el.slideDown();
    
    // Native
    let originHeight = '100px';
    el.style.transition = 'height 3s';
    // slideUp
    el.style.height = '0px';
    // slideDown
    el.style.height = originHeight;
    
  • 8.7 slideToggle

    スラむドを䌎っお、゚レメントの衚瀺・非衚瀺を切り替えたす。

    // jQuery
    $el.slideToggle();
    
    // Native
    let originHeight = '100px';
    el.style.transition = 'height 3s';
    let { height } = el.ownerDocument.defaultView.getComputedStyle(el, null);
    if (parseInt(height, 10) === 0) {
     el.style.height = originHeight;
    }
    else {
     el.style.height = '0px';
    }
    
  • 8.8 animate

    CSSプロパティで定矩されたアニメヌションを衚瀺したす。

    // jQuery
    $el.animate({params}, speed);
    
    // Native
    el.style.transition = 'all' + speed;
    Object.keys(params).forEach(function(key) {
     el.style[key] = params[key];
    })
    

遞択肢

  • You Might Not Need jQuery - ネむティブのJavaScriptでむベント、゚レメント、Ajaxを扱うサンプル集(英語)
  • npm-dom and webmodules - npmで利甚できるDOMモゞュヌルを集めたOrganizationです

察応ブラりザ

👁 Chrome
👁 Firefox
👁 IE
👁 Opera
👁 Safari
Latest ✔ Latest ✔ 10+ ✔ Latest ✔ 6.1+ ✔

ラむセンス

MIT

  1. 「もちろん。MITラむセンスなんだから奜きにしおいいよ」ずのこず。かっこいい ↩

2361

Go to list of users who liked

2417
9

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2361

Go to list of users who liked

2417