關於動畫緩動函數的封裝

来源:https://www.cnblogs.com/Lzxgg-xl/archive/2019/01/06/10227127.html
-Advertisement-
Play Games

動畫緩動函數(左右移動)的總結: 1.函數的參數 此函數有兩個參數 : 其中之一是要移動的元素,第二個參數是要到達的目標位置。 如果要對緩動的速度有很精確的要求 封裝的時候可以封裝三個函數 第三個參數可以設置每一次緩動的距離以方便改動移動的整體幅度 2.動畫函數的函數體里的變數 首先是 要確定移動的 ...


動畫緩動函數(左右移動)的總結:

 

1.函數的參數

 

此函數有兩個參數  :   其中之一是要移動的元素,第二個參數是要到達的目標位置。

如果要對緩動的速度有很精確的要求 封裝的時候可以封裝三個函數  第三個參數可以設置每一次緩動的距離以方便改動移動的整體幅度

 

2.動畫函數的函數體里的變數

 

首先是    要確定移動的元素的初始位置:

var  current = element.offsetLeft;

寫到這裡 順便總結一下 offset系列 和 style 系列的區別把

 

如果你的style屬性是內嵌到標簽中 那麼你在使用 style.xxx的時候是沒有問題的

但是你要註意他返回的呢  並不是數字類型的數據 而是一個字元型 而字元型是不方便進行運算的

即:  如果width 是100px  它返回的是 “100px” 的字元型結果

 //剛開始寫博客  不會往裡面貼圖 啊啊啊啊啊

 

但是如果你的style屬性是寫在head 中 或者說寫在另一個獨立的css文件中

你再使用style.xxx的時候     返回的就是空白

 

 而offset系列就比較好用,無論是寫在哪裡的width  left等屬性值

他都能直接訪問並返回給你一個數字類型的值  這樣就能更方便的進行計算

即:  如果width 是100px  offsetWidth 返回的是 100 的數字型結果

 

//簡單總結結束 我們接著繼續寫下邊的東西 哈哈哈

 

然後到核心的地方  就是一個定時器  

在使用定時器前要先判斷這個元素具體往左邊移動還是右邊移動   

 

step = target - current > 0 ? step : -step;

//這句的意思就是 如果是向右移動 那麼step 保持正數 如果是向左移動 那麼step 保持負數 即可

 

setInterval(function () {
        current += step; //在之前已經進行判斷了 step  在這裡直接加就可以了
        if (Math.abs(target - current) > Math.abs(step)) {

            element.style.left = current + "px";
       //如果終點到目前元素的距離 大於每一次移動的距離 那麼就把目前元素的距離 加step 即current
       //雖然獲取的時候不能用style.left 但是賦值的時候還是可以用style.left的
} else { clearInterval(element.timeID);
       //如果終點到目前元素的距離 小於每次移動的距離 那麼就把目前元素的位置直接等於終點的位置 element.style.left = target + "px"; } }, 20)

  但是這樣並沒有寫完這個函數

  此函數還有個bug  就是如果這樣的話  點擊滑鼠一次  會多一個定時器出來  而最終只能清理掉一個定時器

  所以要在函數還沒有進入 定時器的時候就要進行清理定時器的操作   

  最終粘貼上我的最終代碼

 1 function animation(element, target) {
 2     var current = element.offsetLeft;
 3     var step = 10;
 4     clearInterval(element.timeID);
 5     step = target - current > 0 ? step : -step;
 6 
 7     element.timeID = setInterval(function () {
 8         current += step;
 9         if (Math.abs(target - current) > Math.abs(step)) {
10 
11             element.style.left = current + "px";
12         } else {
13             clearInterval(element.timeID);
14             element.style.left = target + "px";
15         }
16     }, 20)
17 }

 

 寫的不好  請大家多批評指正

 

---恢復內容結束---


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 打開資料庫sql管理 在資料庫中新建查詢 如何輸入: exec sp_attach_db @dbname='YourDataBaseName', @filename1='mdf文件路徑', @filename2='ldf文件路徑' 如果提示:無法打開物理文件 系統拒絕訪問 可以先把資料庫複製到你的根 ...
  • 刪除用戶定義的資料庫角色註意事項 無法從資料庫刪除擁有安全對象的角色。 若要刪除擁有安全對象的資料庫角色,必須首先轉移這些安全對象的所有權,或從資料庫刪除它們。 無法從資料庫刪除擁有成員的角色。 若要刪除擁有成員的角色,必須首先刪除角色的成員。 若要刪除資料庫角色中的成員,請使用 ALTER ROL ...
  • 一、安裝資料庫相關軟體 sql server management studio是管理sql server資料庫的軟體,想要使用需到微軟官網下載安裝sql server,然後再安裝sql server management studio。微軟下載地址https://www.microsoft.com ...
  • 框架是一個目錄,包含了共用資源庫,用於訪問該資源庫中儲存的代碼的頭文件,以及圖像、聲音文件等其他資源。 共用資源庫定義應用程式可以調用的函數和方法。 iOS 提供了許多可在應用程式開發中使用的框架。 要使用一個框架,請將它添加到項目,以便應用程式可以鏈接到它。 大多數應用程式都鏈接到 Foundat ...
  • 本文簡述在Android開發中進度條(ProgressBar)的常見應用,僅供學習分享使用。 ...
  • 前言 之前玩月圓之夜玩的挺high的,最近又找到了個與月圓之夜類似的卡牌游戲,游戲名為 ,中文翻譯名 。 但是這個與月圓之夜有所不同,如果失敗了,只能從開頭重新開始打,可以複活,但是需要靈魂點,靈魂點只能通過購買獲得,然後它裡面的購買是通過谷歌購買的,所以無法購買,我需要靈魂點,這可怎麼破呢? 破解 ...
  • 問題一 在添加過混淆規則後,App打包的時候,發現報錯了 這意思是ManifestParser解析出問題了,可以看到 依賴中使用了Glide的 annotation processor.需要在他的實現類里返回false 所以解決方案是在你自己寫的實現AppGlideModule那個類中添加如下方法即 ...
  • 學習內容: vue.js框架介紹(核心:數據驅動、組件化)vue-cli 腳手架 搭建基本代碼框架Vue-router 官方插件、管理路由vue-resource 與後端進行Ajax通信Webpack 構建工具 (編譯原碼,生成游覽器可以識別和運行的代碼)es6+eslint eslint:es6代 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...