第一百四十五節,JavaScript,同步動畫

JavaScript,同步動畫

?

將上一節的,移動透明動畫,修改成可以支持同步動畫,也就是可以給這個動畫方法多個動畫任務,讓它同時完成

?

原理:

?

向方法里添加一個屬性,這個屬性是一個對象,同步動畫屬性,屬性值為對象,對象里面是,動畫方式:目標量,組合的鍵值對,只能動畫方式加目標量的鍵值對

?

/** yi_dong_tou_ming()方法,動態改變css屬性說明* * yi_dong_tou_ming()方法,將一個元素,進行一下動畫操作* 1,x將元素橫向左移動或者右移動* 2, y將元素豎向上移動或者下移動* 3,w將元素動畫增加或者減少寬度* 4,h將元素動畫增加或者減少高度* 5,o將元素動畫增加或者減少透明度* 注意:也可以寫其他css屬性名稱(全稱),來動畫增加或者減少css屬性的數值,必須是值為數值的css屬性,如:font-size* **************************************  x將元素橫向左移動或者右移動,首先將目標設置定位,position:absolute;*  o將元素動畫增加或者減少透明度,結合css里元素原始透明度filter: alpha(opacity=0);opacity: 0;*  **************************************  yi_dong_tou_ming()方法,參數說明*  參數是一個對象如下*  yi_dong_tou_ming({'attr':'x',        【為動畫方式】,   x.為橫向移動,y.為豎向移動,w.為增加寬度動畫,h.為增加高度動畫,o.為透明度動畫,【必填】注意:也可以寫其他css屬性名稱(全稱),來動畫增加或者減少css屬性的數值,必須是值為數值的css屬性,如:font-sizeo.為透明度動畫,設置透明度動畫時,必須先在css里設置初始透明度如:opacity:1;filter:alpha(opacity=100);否則IE9以下無法實現透明度動畫'type':'1',        【動畫模式】,     0.勻速模式,1.緩沖模式【可選,默認緩沖】'speed':6,         【緩沖速度】,     動畫模式為緩沖時設置,【可選,默認為6】,以此值改變跨度.每一次動畫動態增加或者減少,實現緩沖效果'start':50,        【動畫起始位置】, 起始的像素或者透明度【可選,默認為對象原始位置】一般不需要傳注意:動畫起始位置,一般按鈕動畫使用,如果是鼠標觸動動畫,會不停的初始化,因為鼠標一動就改變了動畫起始位置'target':100,      【目標量】,       就是在原始的像素或者透明度上,增加或者減少到目標量的像素或者透明度【可先,注意目標量不填,增量必填】'alter':50,        【增量】,         就是在對象原始的像素或者透明度上,增加或者減少像素或者透明度【可先,注意增量不填,目標量必填】'step':7,          【跨度】,         每一次動畫增加或者減少的,像素或者透明度,【可選,默認20】'danwei':'em',     【屬性值單位】     danwei.為屬性值單位,也就是以什么單位來計算css屬性,如是px還是em等,不傳默認px't':50 ,           【每次動畫時間】, 也就是多少毫秒執行一次動畫【可選,默認10】fn:function () {   【回調函數,列隊】, 回調函數,用于動畫執行完畢后執行函數,在回調函數里在寫入動畫,就是列隊動畫,也就是一個動畫執行完畢后執行第二個動畫}mul:{              【同步動畫對象】,用于同時要執行多個動畫,同步動畫屬性,屬性值為對象,對象里面是,動畫方式:目標量,組合的鍵值對,只能動畫方式加目標量的鍵值對同步動畫,除了動畫方式和目標量外,其他的都是在同步動畫對象外設置,因為他們是統一的其他參數'w':101,'h':500,'o':30}});**/
feng_zhuang_ku.prototype.yi_dong_tou_ming = function (obj) {for (var i = 0; i < this.jie_dian.length; i++) {var element = this.jie_dian[i];// attr,為動畫方式,// x.為橫向移動// y.為豎向移動// w.為增加寬度動畫// h.為增加高度動畫// o.為透明度動畫var attr = obj['attr'] == 'x' ? 'left' : obj['attr'] == 'y' ? 'top' :obj['attr'] == 'w' ? 'width' : obj['attr'] == 'h' ? 'height' :obj['attr'] == 'o' ? 'opacity' : obj['attr'] != undefined ? obj['attr'] : 'left';// start.為動畫起始位置,// 如果輸入了動畫起始位置,值就為輸入的起始位置,移動動畫是像素值(如100),透明度動畫是透明度百分比(如50)// 如果沒輸入,默認移動動畫獲取的對象原始像素位置,透明度動畫獲取的對象原始透明度,除以100等于原始透明度百分比var start = obj['start'] != undefined ? obj['start'] :attr == 'opacity' ? parseFloat(getStyle(element, attr)) * 100 :parseInt(getStyle(element, attr));// t.為每次動畫時間,也就是多少毫秒執行一次動畫// 不傳默認,是10毫秒執行一次動畫var t = obj['t'] != undefined ? obj['t'] : 10;// step.為跨度,每一次動畫增加或者減少的,像素或者透明度var step = obj['step'] != undefined ? obj['step'] : 20;// danwei.為屬性值單位,也就是以什么單位來計算css屬性,如是px還是em等,不傳默認pxvar danwei = obj['danwei'] != undefined ? obj['danwei'] : 'px';// alter.為增量,就是在對象原始的像素或者透明度上,增加或者減少像素或者透明度var alter = obj['alter'];// target.為目標量,就是在原始的像素或者透明度上,增加或者減少到目標量的像素或者透明度// 注意,增量,是在原始上增加或者減少多少,目標量是在原始的基礎上增加或者減少到目標var target = obj['target'];//mul,接收的,obj對象里的mul屬性,而mul屬性是一個對象,由動畫方式加目標量組合的鍵值對,也就是要同步動畫的參數var mul = obj['mul'];    //接收同步動畫(參數對象)// speed.為緩沖速度,動畫模式為緩沖時,以此值改變step.每一次動畫動態增加或者減少,實現緩沖效果// 不傳,默認為6var speed = obj['speed'] != undefined ? obj['speed'] : 6;// type.為動畫模式,勻速為勻速模式,緩沖為緩沖模式// 不傳,默認為緩沖模式var type = obj['type'] == 0 ? 'constant' : obj['type'] == 1 ? 'buffer' : 'buffer';if (alter != undefined && target == undefined) {target = alter + start;} else if (alter == undefined && target == undefined && mul == undefined) {throw new Error('alter增量,或target目標量,或者同步動畫對象,必須傳一個!');}if (start > target) step = -step;if (attr == 'opacity') {element.style.opacity = parseInt(start) / 100;element.style.filter = 'alpha(opacity=' + parseInt(start) + ')';} else {element.style[attr] = start + danwei;}if (mul == undefined){      //判斷如果同步動畫對象沒有傳,說明是單個動畫mul = {};               //創建mul對象mul[attr] = target;     //將單個動畫的,動畫方式當作對象鍵,將目標量當作值,組合成鍵值對到對象里
        }clearInterval(element.timer);                            //給對每個象創建定時器并停止定時器element.timer = setInterval(function () {               //將對象下的定時器開啟//創建一個布爾值,這個值可以了解對個動畫是否執行完畢var flag = true;    //表示都執行完畢了//循環同步動畫對象for (var i in mul) {attr = i == 'x' ? 'left' : i == 'y' ? 'top' :i == 'w' ? 'width' : i == 'h' ? 'height' :i == 'o' ? 'opacity' : i != undefined ? i : 'left';            //得到同步動畫對象里的,動畫方式target = mul[i];                                                       //得到同步動畫對象里的,目標量
if (type == 'buffer') {step = attr == 'opacity' ? (target - parseFloat(getStyle(element, attr)) * 100) / speed :(target - parseInt(getStyle(element, attr))) / speed;step = step > 0 ? Math.ceil(step) : Math.floor(step);}if (attr == 'opacity') {if (step == 0) {setOpacity();} else if (step > 0 && Math.abs(parseFloat(getStyle(element, attr)) * 100 - target) <= step) {setOpacity();} else if (step < 0 && (parseFloat(getStyle(element, attr)) * 100 - target) <= Math.abs(step)) {setOpacity();} else {var temp = parseFloat(getStyle(element, attr)) * 100;element.style.opacity = parseInt(temp + step) / 100;element.style.filter = 'alpha(opacity=' + parseInt(temp + step) + ')';}//判斷目標值不等于元素當前值,說明動畫還沒到達目標值,將flag修改成falseif (parseInt(target) !=  parseInt(parseFloat(getStyle(element, attr)) * 100)) flag = false;} else {if (step == 0) {setTarget();} else if (step > 0 && Math.abs(parseInt(getStyle(element, attr)) - target) <= step) {setTarget();} else if (step < 0 && (parseInt(getStyle(element, attr)) - target) <= Math.abs(step)) {setTarget();} else {element.style[attr] = parseInt(getStyle(element, attr)) + step + danwei;}//判斷目標值不等于元素當前值,說明動畫還沒到達目標值,將flag修改成falseif (parseInt(target) != parseInt(getStyle(element, attr))) flag = false;}}//判斷flag = true;了說明元素的當前值已經達到目標值,可以停止定時器了if (flag) {clearInterval(element.timer);       //停止定時器if (obj.fn != undefined)obj.fn();   //判斷如果傳入了回調函數,動畫執行完畢后執行回調函數,列隊動畫
            }}, t);function setTarget() {element.style[attr] = target + danwei;}function setOpacity() {element.style.opacity = parseInt(target) / 100;element.style.filter = 'alpha(opacity=' + parseInt(target) + ')';}}return this;
};

?

html代碼

<div id="ceshsdf">測試</div>

css代碼

/*測試*/
#ceshsdf{width:100px;height: 100px;background-color: #ff340e;position: absolute;top: 100px;left: 100px;opacity:1;filter:alpha(opacity=100);
}

前臺js代碼

//測試$('#ceshsdf').on_click(function () {$('#ceshsdf').yi_dong_tou_ming({'t':30,'step':10,mul:{      //同步動畫屬性,屬性值為對象,對象里面是,動畫方式:目標量,組合的鍵值對,只能動畫方式加目標量的鍵值對'w':500,'h':500,'o':30}});});

首先要引入函數庫和封裝庫文件

轉載于:https://www.cnblogs.com/adc8868/p/6416743.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255348.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Exchange Server 2016管理系列課件39.新建本地移動請求

場景通過新建本地移動請求&#xff0c;可以很方便的將用戶郵箱從一個數據庫遷移到另外一個數據庫。1&#xff09;跨平臺郵件遷移&#xff1b;&#xff08;低exchange遷移到高版本exchange&#xff09;2&#xff09;數據庫平衡與優化&#xff1b;&#xff08;企業當中&#xff0…

【數據庫學習】——【匯總】MySQL數據庫下載與安裝(Msi文件安裝和免安裝版本)、Navicat下載與安裝

目錄 1、MySQL數據庫下載與安裝 1&#xff09;MySQL數據庫下載 MySQL官網 MySQL數據庫下載 2&#xff09;MySQL 通過msi文件安裝 3&#xff09;MySQL免安裝版本使用 1&#xff09;將免安裝包移動到安裝的文件夾位置&#xff1b; 2&#xff09;新建data文件夾 3&#xff…

Val編程-文本操作

Val系統相對于高級語言來說&#xff0c;對于文本操作的功能相當的弱。 一般的文本&#xff08;文件夾&#xff09;操作有&#xff1a; 1.新建文本&#xff0c; 2.刪除文本&#xff0c; 3.新建文件夾&#xff0c; 4.刪除文件夾&#xff0c; 5.文本重命名&#xff0c; 6.文…

Linux高級編程--01.vi命令

VI是Linux/Unix下標配的一個純字符界面的文本編輯器。由于不支持鼠標功能&#xff0c;也沒有圖形界面&#xff0c;相關的操作都要通過鍵盤指令來完成&#xff0c;需要記憶大量命令。因此很多人不大喜歡它&#xff0c;但同時由于鍵盤的方式往往比鼠標來得快&#xff0c;一旦熟練…

【數據庫學習】——糾錯:mysql Authentication plugin ‘caching_sha2_password‘ is not supported

目錄 1、環境介紹 2、問題描述 3、原因分析 4、 解決方案 1&#xff09;方法一&#xff1a;直接改成mysql_native_password驗證方式 2&#xff09;方案二&#xff1a; 利用sql命令將驗證機制修改 ① 打開命令行窗口——cmd ② 登錄mysql數據庫 ③ 查看不同用戶名的身份…

xcode中用pods管理第三方庫轉

安裝pods &#xff1a;http://www.cnblogs.com/wangluochong/p/5567082.html 史上最詳細的CocoaPods安裝教程 --------------------------------------------- 第一步&#xff1a;Cmmand&#xff0b;空格&#xff0c;搜索"終端"&#xff0c;使用cd命令進入到我們項目…

Val編程-界面編程

由于示教盒是一個黑白的分辨率為&#xff08;14*40&#xff09;的液晶屏&#xff0c;用戶交互不是很好&#xff0c;界面不友好。而且沒有鼠標導航與觸摸屏。 界面編程函數 1.void cls() 2.void title(string sText) 3.void put(string sText), void put(num nValue) 4.void put…

【機器學習筆記四】分類算法 - 邏輯回歸

參考資料 【1】 Spark MLlib 機器學習實踐 【2】 統計學習方法 1、Logistic分布 設X是連續隨機變量&#xff0c;X服從Logistic分布是指X具有下列分布函數和密度函數 &#xff0c;。其中u為位置參數&#xff0c;γ為形狀參數。如下圖&#xff1a; 分布函數以(u,1/2)為中心…

FPFH+ICP點云配準

A, UniformSampling降噪B, ISS計算關鍵點, FPFH特征在FeatureCloud::setInputCloud中讀入點云,并調用processInput進行處理:processInput處理包括: 1, computeSurfaceNormals () 使用NormalEstimation計算得到表面法向量2, computeLocalFeatures () FPFHEstimationKdTreeIS…

【python 學習】——pycharm終端解釋器和Python解釋器配置

目錄 1、pycharm終端運行的時候前面帶有PS&#xff0c;是什么意思&#xff0c;怎么變成cmd? 1&#xff09;File——settings 2&#xff09;tools——terminal——shellPath 2、pycharm怎么切換不同的Python解釋器&#xff1f; 1&#xff09;File——settings 2&#xff09…

在linux下實現mysql自動備份數據

使用的系統為CentOS&#xff0c;mysql版本為5.6 備份功能主要利用以下功能實現&#xff1a; mysql命令中的mysqldump命令 linux下腳本編寫 linux下crontab定時任務的使用 首先確定你要存放腳本的目錄和存放備份數據的目錄 首先進行以下修改&#xff08;因為在命令行或者腳本中寫…

面向未來編程

我們一直以來都知道面向對象編程&#xff0c;面向過程編程。大多數時候還是面向工資編程&#xff0c;面向生活編程。面向任務編程&#xff0c;面向公司編程&#xff0c;面向領導編程。 工資不給力&#xff0c;心里認為委屈&#xff1b;生活有壓力。影響工作情緒。任務完畢就好…

Plotclock

調試程序&#xff0c;運行調試程序&#xff0c;舵機會移動兩只懸臂分別停留在一只水平另一只垂直的位置上。如果差距非常大&#xff0c;可拆下懸臂調節&#xff0c;如果比較接近了&#xff0c;就修改程序第3~6行的四個參數 SERVOFAKTORLEFT 左懸臂垂直位置&#xff0c;SERVOFAK…

js性能優化--學習筆記

《高性能網站建設進階指南》&#xff1a; 1.使用局部變量&#xff0c;避免深入作用域查找&#xff0c;局部變量是讀寫速度最快的&#xff1b;把函數中使用次數超過一次的對象屬性和數組存儲為局部變量是一個好方法&#xff1b;比如for循環中的.length通常可以保存為局部變量。 …

struct和typedef struct在C與C++中用法

struct和typedef struct 分三塊來講述&#xff1a;   1 首先&#xff1a;//注意在C和C里不同     在C中定義一個結構體類型要用typedef:     typedef struct Student    {    int a;    }Stu;     于是在聲明變量的時候就可&#xff1a;Stu stu1;(如…

【數據庫學習】——Python實現mysql數據庫SQL文件生成和導入

目錄 1、將mysql數據導出到SQL文件中&#xff08;數據庫存在的情況&#xff09; 2、將現有的sql文件數據導入到數據庫中&#xff08;前提數據庫存在&#xff09; 3、利用Navicat導出SQL文件和導入SQL文件 1&#xff09;從數據庫導出SQL文件 2&#xff09;導入SQL文件到數據…

lfcp——PB使用

場景&#xff1a;記錄以備忘。 1 直接說明 pb連接說明&#xff1a;目前項目共有性能、功能、業務、聯調四個環境。所以pb可以連接四個不同的數據庫。1.copy一份pb程序&#xff0c;修改main.ini文件中的DBCONNECT/DBCONNECT2位new&#xff0c;DBNAME/DBNAME2為oracle數據源中的源…

【重磅】Google官方推出了免費的、中文的、機器學習初級課程。

2019獨角獸企業重金招聘Python工程師標準>>> 機器學習(Machine Learning, ML)是一門多領域交叉學科&#xff0c;涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。它是人工智能的核心&#xff0c;是使計算機具有智能的根本途徑&#xff0c;其應用遍及…

市面上常見arduino版本比較

http://arduino.cc/en/Main/Products 詳細鏈接 如果是入門&#xff0c;那么首選UNO R3&#xff0c;方便又省心 如果不是特殊要求&#xff0c;不建議購買2560&#xff0c;因為貴啊 nano是塊很好的控制器&#xff0c;買不買隨你咯 非特殊場合使用不建…

leetcode-114. Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example,Given 1/ \2 5/ \ \3 4 6The flattened tree should look like: 1\2\3\4\5\6思路&#xff1a;遞歸處理&#xff0c;引用二叉鏈表的思想&#xff0c;使用pre記錄上一個分支的指針。Accepted Co…