整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

第13天 - 16天搞定前端,CSS的动画效果,酷

第13天 - 16天搞定前端,CSS的动画效果,酷

以往,想在HTML上实现动画效果,要不就用被乔布斯恨死的了Flash 动画,要不就用网页动画图像或者JavaScript 实现效果。在CSS3之后,就可以用CSS在HTML上实现动画了。

要创建 CSS3 动画,你需要了解 @keyframes 规则。现在 @keyframes 创建动画时,需将其绑定到一个选择器,否则动画不会有任何效果。

13.1 原生创建动画

用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>

输出结果


13.2 动画库创建

如果每次都要自己手动用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属性,表示这个对象被装饰过了。

应用场景

装饰器的应用场景非常广泛,包括但不限于:

  1. 日志记录:在方法调用前后记录日志。
  2. 权限验证:在执行方法前检查用户权限。
  3. 数据验证:在设置属性值时进行数据校验。

将装饰器应用于类

要将装饰器应用于类,可以在类定义前使用@符号。以下是一个简单的示例:

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)。例如,如果有一个表格组件,则可以按以下方式使用此功能:

$on(‘hook:’)

如果要在created或mounted方法中定义自定义事件侦听器或第三方插件,并且需要在beforeDestroy方法中将其删除以免引起任何内存泄漏,则可以使用此功能。使用$on(‘hook:’)方法,我们可以仅使用一种生命周期方法(而不是两种)来定义/删除事件。

prop 验证

你可能已经知道可以将props验证为原始类型,例如字符串,数字甚至对象。我们还可以使用自定义验证器,例如,如果要针对字符串列表进行验证:

动态指令参数

Vue 2.6 的最酷功能之一是可以将指令参数动态传递给组件。假设有一个按钮组件,并且在某些情况下想监听单击事件,而在其他情况下想监听双击事件。这就是动态指令派上用场的地方了:

重用同一路由的组件

有时,我们不同路由共用某些时,如果在这些路由之间切换,则默认情况下,共享组件将不会重新渲染,因为Vue 出于性能原因会重用该组件。但是,如果我们仍然希望重新渲染这些组件,则可以通过在路由器视图组件中提供:key属性来实现重新渲染。

从父类到子类的所有 props

这是一个非常酷的功能,可将所有prop从父组件传递到子组件。如果我们有另一个组件的包装器组件,这将特别方便。因为,我们不必一个一个将prop传递给子组件,而是一次传递所有prop:

上面的可以代替下面的做法

从父类到子类的所有事件侦听器

如果子组件不在父组件的根目录下,则可以将所有事件侦听器从父组件传递到子组件,如下所示:

如果子组件位于其父组件的根目录下,则默认情况下它将获得那些组件,因此不需要此小技巧。

$createElement

默认情况下,每个Vue实例都可以访问$createElement方法来创建和返回虚拟节点。例如,可以利用它在可以通过v-html指令传递的方法中使用标记。在函数组件中,可以将此方法作为渲染函数中的第一个参数访问。

使用 JSX

由于Vue CLI 3默认支持使用JSX,因此现在(如果愿意)我们可以使用JSX编写代码(例如,可以方便地编写函数组件)。如果尚未使用Vue CLI 3,则可以使用babel-plugin-transform-vue-jsx获得JSX支持。

自定义 v-model

默认情况下,v-model是@input事件监听器和:value props上的语法糖。但是,我们可以在Vue组件中指定一个模型属性,以定义使用什么事件和值

总结

希望这些窍门和技巧对你有所帮助,如果你也知道哪些技巧,欢迎留言。


原文:https://www.telerik.com/blogs/12-tips-and-tricks-to-improve-your-vue-projects