# SMD同步模塊
> 今天小感冒就不寫那么多了,就先貼代碼
>
* 模塊文件
~~~
// 同步加載模塊學習
// 定義模塊管理單體對象
var F = F || {}
F.define = function (str, fn) {
/**
* @param parts 路徑解析
* @param old 祖先
* @param parent 父
* @param this 當前
* @param i 模塊層級
* @param len 模塊層級長度
* @type {string[]}
*/
var parts = str.split('.'),
old = parent = this,
i = len = 0;
if(parts[0] === "F") {
parts = parts.slice(1)
}
if(parts[0] === 'define' || parts[0] === "module") {
return;
}
// 遍歷路由模塊并定義每層模塊
for (len = parts.length; i<len; i++) {
// 如果父模塊中不存在當前模塊
if(typeof parent[parts[i]] === 'undefined') {
// 聲明當前模塊 在這里parent 依舊等于old,this
parent[parts[i]] = {}
}
// 緩存下一層級的祖父模塊
old = parent
// 緩存下一層級父模塊 parent 等于 str里定義的模塊
parent = parent[parts[i]]
}
// 如果給定模塊方法則定義該模塊方法
if (fn) {
// 此時i等于parts.length,故減一
old[parts[--i]] = fn ()
}
old['test'] = 'kingEND'
console.log("old=", old[parts[i]])
console.log("this=", this)
console.log("parent=", parent)
console.log("parts=", parts)
// 返回模塊管理器單體對象
return this
}
F.module = function () {
var args = [].slice.call(arguments),
// 獲取回調執行函數
fn = args.pop(),
parts = args[0] && args[0] instanceof Array ? args[0] : args,
// 依賴模塊列表 回調函數參數
modules = [],
// 模塊路由
modIDs = "",
// 依賴模塊索引
i = 0,
// 依賴模塊的長度
ilen = parts.length,
// 父模塊,模塊路由層級索引,模塊路由層級長度
parent,j,jlen;
while (i < ilen) {
// 如果是模塊路由
if (typeof parts[i] === 'string') {
// 設置當前模塊父對象
parent = this
// 解析模塊路由,并屏蔽掉模塊父對象
modIDs = parts[i].replace(/^F\./,'').split('.')
console.log('modIDs=', modIDs)
// 遍歷模塊路由層級
for (j = 0 ,jlen = modIDs.length; j< jlen; j++) {
// 重置父模塊
parent = parent[modIDs[j]] || false
}
console.log(parent)
// 將模塊添加到依賴模塊列表中
modules.push(parent)
//如果模塊是對象
} else {
modules.push(parts[i])
}
// 取下一個模塊
i++
}
fn.apply(null, modules)
}
~~~
* 測試文件
~~~
F.define('string', function () {
return {
trim: function (str) {
return str.replace(/^\s+|\s+$/g)
}
}
})
var result = F.string.trim("測試用例")
console.log("result=", result)
F.define('dom', function () {
var $ = function (id) {
$.dom = document.getElementById(id)
return $
}
$.html = function(html) {
if (html) {
this.dom.innerHTML = html
return this
} else {
console.log("$=", this.dom.innerHTML)
return this.dom.innerHTML
}
}
return $
})
F.dom('test').html()
F.define('dom.addclass.removeclass')
F.dom.addclass = function (type, fn) {
return function (className) {
if(!~this.dom.className.indexOf(className)) {
this.dom.className += '' + className
}
console.log(this.dom.className.indexOf(className))
}
}();
F.dom.removeclass = function () {
return function (className) {
if(!~this.dom.className.indexOf(className)) {
console.log("removeclass")
}
}
}
F.module(['dom', document, F], function (dom, doc) {
dom('test').html('new add!')
doc.body.style.background = "blue"
})
~~~
### 總結
* 先說定義模塊
- 前端
- pc端
- 京東無延時菜單效果
- datapicker組件的編寫
- cursor禁止默認樣式
- 移動端
- web在真機調試
- 有關vue的上拉加載
- 下拉刷新
- vue獲取dom節點
- worker技術
- h5頁面喚醒手機撥號,發短信功能
- 彈出層喚醒擠壓css背景圖片
- 23模式
- 基礎模式
- SMD同步模塊
- canvas
- 點的均勻分布
- 線條繪畫
- canvas常見的全局屬性
- 判斷點在某個區間內
- 保證動畫效果的流暢性
- arc函數學習
- cookies
- 本地服務搭建
- Mint UI框架的學習
- 第一天
- Swiper組件的解析
- loadmore組件
- 二維碼的生成
- 前端優化
- 瀏覽器緩存
- indexdb本地數據庫的使用
- 淺談前端優化
- css漸變屬性
- 前端常用組件學習
- picker組件
- vue
- 模塊下的state訪問
- vue的進階
- npm包的發布
- 淘寶移動端適配問題
- vue的生命周期的理解
- vue的路由學習
- vue自帶的動畫效果
- vue 項目里,img標簽報錯,添加默認圖片
- axios 實現loading加載提示
- qs庫
- vue的v-for指令無法使用在tr、td中
- vue打包之后,npm run dev 空白
- vue 單頁面百度統計
- unix時間轉化
- UI組件的實現
- picker
- upload組件
- js動畫效果
- canvas甜甜圈的編寫
- 瀑布流實現
- 適配問題
- 圖片加載
- js基礎知識
- js數組合并
- 響應布局總結
- 組件開發
- grid組件
- 專題頁面常用布局頁面
- scroll滾動問題
- 項目整理經驗收集
- 畫圖工具應用實現記錄
- 參考線實現
- JCode
- 多條件篩選不用ajax的原因分析
- node
- koa路由下的分塊
- 連接數據庫mysql
- 初步搭建數據庫模型
- java
- spring框架的學習
- maven 搭建web項目
- 建站
- 關聯github
- 雜文
- 后端常用成熟系統
- node實戰練習
- 編寫郵箱通知
- 微信小程序
- 模板之坑
- 模板坑之數據傳入
- 小程序組件化之一
- 有關this的綁定
- 小程序組件化之二
- 小程序分包加載
- tab切換,頁面狀態不更新
- 小程序請求組件(草稿)
- php學習之路
- 文件上傳
- 有關數據庫時間類型的插入
- Ubuntu下的php開啟擴展模塊
- windows系統下的hosts文件位置
- 騰訊云的cos
- thinkPHP
- 模塊設計
- 模型的使用
- ajax的請求異常總結
- apache服務器
- 虛擬主機的建立
- ssh的使用
- ftp服務器配置
- Lamp的搭建
- ftp從零開始配置
- https的配置
- git hooks實現簡單的自動部署
- ubuntu系統登錄遠程ubuntu服務器
- ubuntu
- 新建用戶需要使用sudo
- sftp的文件上傳問題
- 配置apache部分問題總結
- git服務器的搭建
- githook的學習
- ubuntu 虛擬主機搭建
- ubunut的服務器的防火墻的關閉
- 寶塔部署laravel
- 關于寶塔phpmyadmin無法訪問的問題
- 解決碼云每次提交輸入密碼的問題
- mysql
- phpmyadmin的安裝
- 遠程登陸數據庫
- git的使用
- 拉去分支的代碼
- git remote指令
- 學習臨時筆記
- ios兼容性問題
- 蘋果獲取屏幕寬度問題
- toDataURL無法導出圖片
- 蘋果觸屏滾動,下拉刷新問題
- jquery動畫
- jquery的animate無法使用transform
- jquery隊列queue
- css重學之路
- 規范一
- css3的matrix屬性
- 淘寶適配方案
- Yii框架學習
- gd庫的支持安裝
- larval框架學習
- 中間件
- 指令
- 自定義指令生成token
- 微信登錄后端篇
- 寶塔apache配置ssl
- SVN
- PS
- 快捷鍵
- Redis
- Redis在Unbtun下的配置
- 微信公眾號開發
- 測試號配置