snabbdom.js(四)

统共写了四篇文章(都是本身的一些鄙见,仅供参考,请多多指教,我这边也会延续修正加更新)

  1. 引见一下snabbdom基础用法
  2. 引见一下snabbdom衬着道理
  3. 引见一下snabddom的diff算法和对key值的熟悉
  4. 引见一下关于兼容IE8的修正

这篇主如果纪录一下针对ie8做了哪些修正

  1. 增添polyfill.js用来兼容某些功用函数,比方addeventliostener,forEach等
  2. 将每一个文件单独用对象封装供其他文件运用

    举例:
    导出
    //a.js
       aModule={};
       
       (function(aModule){
            aModule.init=function(){}
       })(aModule)
    
    导入
       <script type="text/javascript" src="a.js"></script>
       var init=aModule.init;
  3. class.js(IE8没有classList属性)

     elm.classList.remove(name); //兼容IE8
     改成:
     if (elm.classList) {
         elm.classList.remove(name);
     } else { //兼容IE8
         elm.className = elm.className.replace(name, "");
     }
     
     elm.classList[cur ? 'add' : 'remove'](name);
     改成:
     if (elm.classList) {
         elm.classList[cur ? 'add' : 'remove'](name);
     } else { //兼容IE8
         if (cur) { //add 
           elm.className += ' ' + name;
         } else { //remove
           elm.className = elm.className.replace(name, "");
         }
     }
  4. dataset.js(IE8没有dataset属性)

    delete elm.dataset[key];
    
    elm.dataset[key] = dataset[key];
    改成:
    _updateDataset(elm, 'remove', key)
    
    _updateDataset(elm, 'set', key, dataset[key])
    
    //兼容IE8
     function _updateDataset(elm, type, key, val) {
         if (elm.dataset) {
             if ('remove' == type) {
                 delete elm.dataset[key];
             } else {
                 elm.dataset[key] = val;
             }
         } else {
             var name;
             name = 'data-' + key;
             if ('remove' == type) {
                 elm.removeAttribute(name);
             } else {
                 elm.setAttribute(name, val);
             }
         }
     }
    
  5. eventlistener.js(这里比较新鲜的就是绑定在handler函数上的vnode属性在IE8上无法接见,所以我在这里采纳的是将vnode主动通报进去,经由过程闭包保留)

     var listener = vnode.listener = oldVnode.listener || createListener();

    改成:

    var listener = vnode.listener = oldVnode.listener || createListener(vnode);
     function createListener() { //兼容IE8,接见不到handler.vnode,得传进来
         return function handler(event) {
             handleEvent(event, handler.vnode);
         }
     }
    
     改成:
     
     function createListener(vnode) { //兼容IE8,接见不到handler.vnode,得传进来
         return function handler(event) {
             if (handler.vnode) {
                 handleEvent(event, handler.vnode);
             } else {
                 handleEvent(event, vnode);
             }
         }
     }
    原文作者:liuzaijiang
    原文地址: https://segmentfault.com/a/1190000017494710
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞