.circle-block { display: inline-block; width: 100px;"> .circle-block { display: inline-block; width: 100px;">

高級前端進階(四)

有一陣子沒發部落格了,在這期間,倒是沉澱了不少東西。嘿嘿!

一、樣式動畫

1、大屏中常用到的旋轉動畫

<div class="circle-block circle-rotate"></div>
.circle-block {
  display: inline-block;
  width: 100px;
  height: 100px;
  background-color: blueviolet;
}
// 旋轉動畫
@keyframes circleRotate {
    100%{
        transform: rotate(360deg);
    }
}
.circle-rotate{
    animation: circleRotate 4s linear infinite; // 順時針旋轉,無限次,一次用時4s。
}

2、單行文本截斷

<p class="text-overflow">塑料袋放進挨過打幾份路口五金弗蘭克教授發電公司的風景</p>
.text-overflow {
  width: 100px;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}

二、淺談設計模式

1、單例模式

所謂的單例模式,就是類不管new多少次,都是調用的同一個對象。
咱來點高級點的,通過閉包來實現所謂的單例模式,當然,這種方式個人認為也是非常好的一種。直接上程式碼

function SingleWrapper(className) {
    let instance = null; // 通過這個變數來保存實例
    return function () {
        if (!instance)
            instance = new className();
        return instance;
    }
}

function User() {
    this.name = '用戶名';
}
let getUserInstance = SingleWrapper(User); // 使用閉包
let user1 = getUserInstance();
let user2 = getUserInstance();
console.log(user1.name, user2.name); // 用戶名  用戶名
console.log(user1 === user2); // true

// 如果不用單例模式的話
let user1 = new User();
let user2 = new User();
console.log(user1.name, user2.name); // 用戶名  用戶名
console.log(user1 === user2); // false  實例化了兩個User對象,這兩個對象是不一樣的

單例模式的應用
實際中像示例這樣運用的,個人幾乎沒怎麼看到過。

但是呢,只是用一個對象的思想倒是運用的很多。
比如說通過axios發送請求的時候,只創建一個axios的實例,然後發送請求。
當然有些場景,根據需要創建相應的的axios實例。
還有echars實例,地圖實例等。

2、發布-訂閱模式

事件匯流排便是採用了這個模式
高級前端進階(三)事件匯流排
注意:有個要點就是,一定要先訂閱事件後,然後事件發布後才能觸發。有個先後的關係。

3、觀察者模式

這個在實際開發中,可能用不到。這個模式主要用在了前端框架(Vue,React,Angular)上。
這裡簡述一下:
js通過defineProperty定義對象變數的時候,其實呢,裡面有個getter跟setter方法,getter獲取值,setter設置值,很好理解。
而觀察者模式,主要觀察這個對象變數的值有沒有改變,只要改變了,就會觸發這個setter方法,然後再在這個方法裡面觸發其他的方法。比如操作dom,重新渲染一下,這便是響應式原理。defineProperty只不過有些弊端,比如監聽數組的時候,無法實現響應式,歸根結底是因為沒有setter方法。現在Vue3使用Proxy來實現響應式了。

注意:發布-訂閱模式跟觀察者模式其實是不一樣的,這兩者有著本質上的區別的。好好理解下就明白了。

三、總結

Vue3正式版發布了,element-plus也發布了,可以考慮慢慢地上手TypeScript(ts)了。

學無止境

Tags: