ホームページ  >  記事  >  ウェブフロントエンド  >  一般的な JS 関数をカプセル化する方法

一般的な JS 関数をカプセル化する方法

一个新手
一个新手オリジナル
2017-09-07 13:27:012240ブラウズ

フロントエンド開発では、このような問題によく遭遇します。つまり、ページが特定の位置までスクロールすると、先頭に戻る必要があるため、すべてのページにそのようなメソッドを記述すると、コードが非常に重くなります。冗長なので、この問題を解決するためにコードを抽出し、使いやすいようにパブリック関数にカプセル化しました。梱包があまり良くないので、意見が違う場合は話し合ってください〜一般的な JS 関数をカプセル化する方法

/** * 页面回顶部
 * @obj //对象{}传入 ; 其中回顶部的imgSrc路径必传 ; 其他参数说明看函数内部的默认defaults对象 
 */
function _backToTop(obj){   
    var defaults = {
      pageHeight: 2,    //默认当向下滚动2页时,显示      
      aId: 'aToTop',    //a标签的id      
      href: 'backTop',   //跳转到指定body元素的顶部      
      aStyle: {        //a标签样式    
      width: '40px',
         height: '40px',
         display: 'block',
         position: 'fixed',
         right: '20px',
         bottom: '50px',
         zIndex: 99999  //z-index:999的这种样式以 zIndex:999的方式传值      
      },
      imgStyle: {          //img标签样式         
         width: '100%',
         height: '100%'      }
   };   for (var def in defaults) {      if (typeof obj[def] === 'undefined') {         obj[def] = defaults[def];
      }      else if (typeof obj[def] === 'object') {         for (var deepDef in defaults[def]) {            if (typeof obj[def][deepDef] === 'undefined') {               obj[def][deepDef] = defaults[def][deepDef];
            }
         }
      }
   }   
   //把样式对象转化为样式字符串,有如:z-index:999;的样式按 zIndex:999;的 方式传值   
       obj.aStyle = 
   JSON.stringify(obj.aStyle).replace(/{|}|"/g,'').replace(/,/g,';').replace(/[A-Z]/g, function(ch) {return '-'+String.fromCharCode(ch.charCodeAt(0) | 32);});   
       obj.imgStyle = JSON.stringify(obj.imgStyle).replace(/{|}|"/g,'').replace(/,/g,';').replace(/[A-Z]/g, function(ch) {return '-'+String.fromCharCode(ch.charCodeAt(0) | 32);});  
        var winHeight = document.documentElement.clientHeight || document.body.clientHeight;   
        var scrollValue;
        document.getElementsByTagName('body')[0].setAttribute('id',obj.href);   
        var box = document.createElement('a');   
        var img = document.createElement('img');
   box.setAttribute('id',obj.aId);
   box.setAttribute('href','#'+obj.href);
   box.setAttribute('style',obj.aStyle);
   img.setAttribute('style',obj.imgStyle);
   img.setAttribute('src',obj.imgSrc);
   box.appendChild(img);
   window.addEventListener('scroll',function(e){
      scrollValue = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;      if(scrollValue > (winHeight * obj.pageHeight)){
         document.body.appendChild(box);
      }else{
         document.getElementById(obj.aId) ?
   document.body.removeChild(document.getElementById(obj.aId)) : null;
      }
   });
}

以上が一般的な JS 関数をカプセル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。