案例總結(jié)【原生js實現(xiàn)煩人的廣告彈框】

仿寫了一個簡單的廣告彈窗,主要功能就是頁面加載完畢時,右下角廣告彈出來,點了×,過一會又自己彈出來,樣式如下

image

完整代碼放在GitHub倉庫:https://github.com/HiJackLi/demo/

一、要點記錄

1.彈框運動需要幾個可供用戶配置的參數(shù):運動距離(盒子高度決定)、運動時間、運動速度(運動步數(shù)決定)、等待重復出現(xiàn)時間
2.通過定時器setTimeout來進行每一幀的運動,并需要一個幀數(shù)記錄器來記錄彈框運動了幾次

3.當幀數(shù)記錄的數(shù)<運動總步數(shù)時,重復進行上面的運動,也就涉及遞歸了。

4.頁面初始化時運動是向上運動,點擊×是向下運動,等待一會出現(xiàn)是向上運動,所以有兩種運動函數(shù),一個向上,一個向下。

5.每次運動結(jié)束要清除定時器,并且置為null,幀數(shù)記錄器也要歸零

6.點擊×需要上鎖,避免重復點擊??梢酝ㄟ^定時器返回值timer==null來判斷是否進行下一步運動

二、反思問題

1.在獲取彈框的高度時用Element.style.height的方法是一大錯誤,因為這種方法獲取不到外部樣式,最后通過網(wǎng)上查找了解到了一個方法getComputedStyle(),這個能夠獲取完整的元素樣式表,唯一不足就是對屬性只讀不能寫,重新賦值操作還得Element.style

2.獲取元素的定位bottom時忘記使用parseFloat方法去掉單位
3.中間一直出問題,由于使用對象編程的方式,在定時器和遞歸中的this指向問題上被搞暈了。因為我用var self = this的方法來解決this指向問題,最后發(fā)現(xiàn)根本不行,由于遞歸很多次,這種方法只能解決一層。后面使用了bind才解決了,并且上網(wǎng)查了一下call和apply也不行,因為call和apply會立即執(zhí)行運動函數(shù),不會等待定時器的計時,所以遞歸會進行,但是并沒有運動的跡象。而bind是返回一個新的函數(shù)等待被執(zhí)行。
4.加鎖思想一直思維定勢,總是想聲明一個變量來給個布爾值進行加鎖,其實可以根據(jù)情況判斷,比如這種案例可以用定時器的返回值是否為null來判斷,因為每次運動結(jié)束都要置為null,如果是在運動,那么點擊就不會重復添加事件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章 1.什么是DOM DOM: Document Object Model(文檔對象模型) 是JavaScri...
    fastwe閱讀 888評論 0 0
  • 【幸福女孩 糖糖 二年級 堅持原創(chuàng)分享第665天 2019.07.09 星期二】
    何亞珂閱讀 174評論 0 0
  • 夜的微光熏陶著這座城市,一切都是那么寧靜,祥和。望著窗外,星空下的城市早已陷入了沉睡。困倦在身邊縈繞著,卻遲...
    Archer_015閱讀 189評論 0 0
  • 都說沒有對比就沒有傷害, 不過沒有對比也就沒有幸福。 和一位和我差不多的 在異國他鄉(xiāng)(他異國我他鄉(xiāng))苦逼求學 的老...
    Ms柔依閱讀 277評論 0 3
  • 愛情 一個老生常談的話題,人們常在懵懂時期便對此有了憧憬和向往 然而事與愿違,第一段抱有熱情付出的愛,最終卻又付之...
    洛陽生的小故事閱讀 147評論 0 1

友情鏈接更多精彩內(nèi)容