以往,想在HTML上實現動畫效果,要不就用被喬布斯恨死的了Flash 動畫,要不就用網頁動畫圖像或者JavaScript 實現效果。在CSS3之后,就可以用CSS在HTML上實現動畫了。
要創建 CSS3 動畫,你需要了解 @keyframes 規則?,F在 @keyframes 創建動畫時,需將其綁定到一個選擇器,否則動畫不會有任何效果。
用CSS3原生代碼創建動畫,語法是@keyframes animationname {keyframes-selector {css-styles;}},其中animationname :必需,動畫的名稱;
keyframes-selector:必需,動畫時長的百分比合法的值:0-100%, from(與 0% 相同),to(與 100% 相同)
css-styles:必需,一個或多個合法的 CSS 樣式屬性。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>動起來</title>
<style>
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation: myfirst 5s;
-webkit-animation: firstan 5s; /* Safari and Chrome */
}
@keyframes firstan {
0% {
background: red;
left: 0px;
top: 0px;
}
25% {
background: yellow;
left: 200px;
top: 0px;
}
50% {
background: blue;
left: 200px;
top: 200px;
}
75% {
background: green;
left: 0px;
top: 200px;
}
100% {
background: red;
left: 0px;
top: 0px;
}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
0% {
background: red;
left: 0px;
top: 0px;
}
25% {
background: yellow;
left: 200px;
top: 0px;
}
50% {
background: blue;
left: 200px;
top: 200px;
}
75% {
background: green;
left: 0px;
top: 200px;
}
100% {
background: red;
left: 0px;
top: 0px;
}
}
</style>
</head>
<body>
<div/>
</body>
</html>
輸出結果
如果每次都要自己手動用CSS去創建動畫,那效果太低了。為此,有人專門專門開發了CSS動畫庫animation.css??梢栽诰€https://animate.stylek看效果,它里面的動畫效果,可以滿足大多數需求了。下載https://github.com/animate-css/animate.css里的animate.min.css文件,放到HTML文件相同目錄下。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用動畫庫實現動畫</title>
<link rel="stylesheet" type="text/css" href="animate.min.css"/>
</head>
<body>
<main class="animate__animated animate__fadeInLeft">
老陳說編程,動畫效果行
</main>
</body>
</html>
輸出結果
好了,有關CSS動畫效果的內容,老陳講完了,如果覺得對你有所幫助,希望老鐵能轉發點贊,讓更多的人看到這篇文章。你的轉發和點贊,就是對老陳繼續創作和分享最大的鼓勵。
一個當了10年技術總監的老家伙,分享多年的編程經驗。想學編程的朋友,可關注:老陳說編程。分享Python,前端(小程序)、App和嵌入式方面的干貨。關注我,沒錯的。
#前端##HTML5##CSS##程序員##Web#
家好,今天我們來聊聊一個非常酷的JavaScript特性——裝飾器。裝飾器(Decorators)最早在Python和Java等語言中廣受歡迎,而現在它也逐漸在JavaScript中得到應用。它能讓我們的代碼變得更加優雅和模塊化。這篇文章將帶你一步步了解什么是裝飾器,并教你如何在項目中使用它們。
簡單來說,裝飾器是一種特殊的函數,它可以用來修改類、方法、屬性等的行為。通過裝飾器,我們可以在不修改原始代碼的情況下,添加額外的功能。裝飾器通常在類定義前使用@符號來應用,就像給代碼加上特殊的“裝飾品”一樣。
讓我們從一個簡單的裝飾器函數開始:
function myDecorator(target) {
// 給目標對象加個標記,表示它被裝飾過了
target.decorated=true;
}
這個示例中的myDecorator是一個簡單的裝飾器函數,它給目標添加了一個decorated屬性,表示這個對象被裝飾過了。
裝飾器的應用場景非常廣泛,包括但不限于:
要將裝飾器應用于類,可以在類定義前使用@符號。以下是一個簡單的示例:
function addTimestamp(target) {
// 給類的原型添加一個timestamp屬性,初始化為當前時間
target.prototype.timestamp=new Date();
}
@addTimestamp
class MyClass {}
const instance=new MyClass();
console.log(instance.timestamp); // 輸出當前日期和時間
在這個示例中,addTimestamp裝飾器為MyClass類添加了一個timestamp屬性。當創建MyClass的實例時,該屬性會被初始化為當前的日期和時間。
方法裝飾器可以修改類方法的行為。假設我們有一個需要記錄方法調用情況的需求,可以這樣實現:
function logMethod(target, propertyKey, descriptor) {
const originalMethod=descriptor.value;
descriptor.value=function (...args) {
console.log(`調用方法${propertyKey},參數為:`, args);
return originalMethod.apply(this, args);
};
return descriptor;
}
class MyClass {
@logMethod
greet(name) {
return `Hello, ${name}!`;
}
}
const instance=new MyClass();
console.log(instance.greet('World'));
// 輸出:
// 調用方法greet,參數為: [ 'World' ]
// Hello, World!
在這個示例中,logMethod裝飾器記錄了方法調用時的參數,然后再調用原始方法。
訪問器裝飾器可以用來修改getter和setter的行為。假設我們希望每次獲取某個屬性值時,值都被轉換為大寫,可以這樣實現:
function capitalize(target, propertyKey, descriptor) {
const originalGetter=descriptor.get;
descriptor.get=function () {
const result=originalGetter.call(this);
return result.toUpperCase();
};
return descriptor;
}
class Person {
constructor(name) {
this._name=name;
}
@capitalize
get name() {
return this._name;
}
}
const person=new Person('john');
console.log(person.name); // 輸出: JOHN
在這個示例中,capitalize裝飾器修改了name屬性的getter,使其返回大寫的名字。
屬性裝飾器可以用于添加元數據,但不能直接修改屬性值。假設我們希望某個屬性是只讀的,可以這樣實現:
function readOnly(target, propertyKey) {
Object.defineProperty(target, propertyKey, {
writable: false
});
}
class Car {
@readOnly
make='Toyota';
}
const myCar=new Car();
console.log(myCar.make); // 輸出: Toyota
myCar.make='Honda'; // 此操作將靜默失敗或在嚴格模式下拋出錯誤
console.log(myCar.make); // 仍輸出: Toyota
在這個示例中,readOnly裝飾器使make屬性變為只讀,因此任何修改該屬性值的嘗試都不會成功。
參數裝飾器可以用于為方法參數添加元數據。假設我們希望在方法調用時記錄某個參數的值,可以這樣實現:
function logParameter(target, propertyKey, parameterIndex) {
const originalMethod=target[propertyKey];
target[propertyKey]=function (...args) {
console.log(`方法${propertyKey}的第${parameterIndex}個參數值為:`, args[parameterIndex]);
return originalMethod.apply(this, args);
};
}
class User {
greet(@logParameter name) {
return `Hello, ${name}!`;
}
}
const user=new User();
console.log(user.greet('Alice'));
// 輸出:
// 方法greet的第0個參數值為: Alice
// Hello, Alice!
在這個示例中,logParameter裝飾器記錄了特定參數的值,每當調用該方法時都會執行此記錄。
裝飾器是一種非常實用的工具,無論是日志記錄、權限驗證還是數據校驗,它都能讓我們的代碼更優雅。隨著裝飾器在JavaScript中的廣泛支持和標準化,它們將成為我們開發中的利器。如果你有任何問題或想法,歡迎在評論區留言,我們一起交流探討!
介
我比較喜歡使用 Vue 來開發,所以有時會深入研究其功能和特性。通過這篇文章,向你們介紹十個很酷的竅門和技巧,以幫助大家成為更好的 Vue 開發者。
隨著Vue 2.6的推出,已經引入了插槽的簡寫方式,之前簡寫可用于事件(例如,@click表示v-on:click事件)或冒號表示方式用于綁定(:src)。例如,如果有一個表格組件,則可以按以下方式使用此功能:
如果要在created或mounted方法中定義自定義事件偵聽器或第三方插件,并且需要在beforeDestroy方法中將其刪除以免引起任何內存泄漏,則可以使用此功能。使用$on(‘hook:’)方法,我們可以僅使用一種生命周期方法(而不是兩種)來定義/刪除事件。
你可能已經知道可以將props驗證為原始類型,例如字符串,數字甚至對象。我們還可以使用自定義驗證器,例如,如果要針對字符串列表進行驗證:
Vue 2.6 的最酷功能之一是可以將指令參數動態傳遞給組件。假設有一個按鈕組件,并且在某些情況下想監聽單擊事件,而在其他情況下想監聽雙擊事件。這就是動態指令派上用場的地方了:
有時,我們不同路由共用某些時,如果在這些路由之間切換,則默認情況下,共享組件將不會重新渲染,因為Vue 出于性能原因會重用該組件。但是,如果我們仍然希望重新渲染這些組件,則可以通過在路由器視圖組件中提供:key屬性來實現重新渲染。
這是一個非常酷的功能,可將所有prop從父組件傳遞到子組件。如果我們有另一個組件的包裝器組件,這將特別方便。因為,我們不必一個一個將prop傳遞給子組件,而是一次傳遞所有prop:
上面的可以代替下面的做法
如果子組件不在父組件的根目錄下,則可以將所有事件偵聽器從父組件傳遞到子組件,如下所示:
如果子組件位于其父組件的根目錄下,則默認情況下它將獲得那些組件,因此不需要此小技巧。
默認情況下,每個Vue實例都可以訪問$createElement方法來創建和返回虛擬節點。例如,可以利用它在可以通過v-html指令傳遞的方法中使用標記。在函數組件中,可以將此方法作為渲染函數中的第一個參數訪問。
由于Vue CLI 3默認支持使用JSX,因此現在(如果愿意)我們可以使用JSX編寫代碼(例如,可以方便地編寫函數組件)。如果尚未使用Vue CLI 3,則可以使用babel-plugin-transform-vue-jsx獲得JSX支持。
默認情況下,v-model是@input事件監聽器和:value props上的語法糖。但是,我們可以在Vue組件中指定一個模型屬性,以定義使用什么事件和值
希望這些竅門和技巧對你有所幫助,如果你也知道哪些技巧,歡迎留言。
原文:https://www.telerik.com/blogs/12-tips-and-tricks-to-improve-your-vue-projects
*請認真填寫需求信息,我們會在24小時內與您取得聯系。