<animatable/>
Web Component construído com Stencil.js para usar API de animações da Web de forma declarativa. Você pode animar qualquer elemento HTML facilmente:
< animatable-component
autoplay
easing =" ease-in-out "
duration =" 800 "
delay =" 300 "
animation =" tada "
>
< h1 > Hello World </ h1 >
</ animatable-component >
Com a maior lista de Keyframes/Easing Functions que também podem ser usados com outras ferramentas de animação ou plataformas! ?
Quer ver este componente da web em ação? Visite https://codepen.io/jdnichollsc/full/rNNYBbe, oba! ?
<animatable />
, um pequeno componente da Web: https://dev.to/jdnichollsc/meet-animatable-a-tiny-web-component-to-use-web-animations-api-as-a-component-1glh Inclui uma demonstração PWA para depuração de animações! ▶
< animatable-component autoplay iterations =" 3 " animation =" heartBeat " easing =" ease-in " duration =" 1000 " >
< h1 > Proof that Tony Stark has a heart ✵ </ h1 >
</ animatable-component >
< animatable-cube
autoplay
fill =" forwards "
composite =" add "
duration =" 2600 "
easing =" linear "
iterations =" Infinity "
fromClassName =" playing "
toClassName =" finished "
animation =" rotate-90-vertical-bck "
>
< div slot =" front-face " > Front </ div >
< div slot =" back-face " > Back </ div >
< div slot =" right-face " > Right </ div >
< div slot =" left-face " > Left </ div >
< div slot =" top-face " > Top </ div >
< div slot =" bottom-face " > Bottom </ div >
</ animatable-cube >
import {
ANIMATIONS ,
EASING_FUNCTIONS ,
EASING ,
KEYFRAMES
} from '@proyecto26/animatable-component' ;
const bounceKeyFrames = KEYFRAMES [ ANIMATIONS . BOUNCE ] ;
const easingOutCubic = EASING_FUNCTIONS [ EASING . EASE_OUT_CUBIC ] ;
// Use here any other animation tool like Ionic Animations, AnimeJS, GSAP, etc! :)
Projeto | Pacote | Versão | Ligações |
---|---|---|---|
Essencial | @proyecto26/animatable-component | README.md | |
Reagir | @proyecto26/animatable-component-react | README.md |
<script src='https://cdn.jsdelivr.net/npm/@proyecto26/[email protected]/dist/animatable-component/animatable-component.esm.js'></script>
no cabeçalho do seu index.htmlnpm install @proyecto26/animatable-component --save
<script src='node_modules/@proyecto26/animatable-component/dist/animatable-component/animatable-component.esm.js'></script>
no cabeçalho do seu index.htmlnpm install @proyecto26/animatable-component --save
import @proyecto26/animatable-component;
Usando componente animatable-component
em um projeto Angular:
Incluir CUSTOM_ELEMENTS_SCHEMA
no módulo permite o uso de Web Components nos arquivos HTML. Aqui está um exemplo de adição ao AppModule
:
import { BrowserModule } from '@angular/platform-browser' ;
import { CUSTOM_ELEMENTS_SCHEMA , NgModule } from '@angular/core' ;
import { AppComponent } from './app.component' ;
@ NgModule ( {
declarations : [ AppComponent ] ,
imports : [ BrowserModule ] ,
bootstrap : [ AppComponent ] ,
schemas : [ CUSTOM_ELEMENTS_SCHEMA ]
} )
export class AppModule { }
O CUSTOM_ELEMENTS_SCHEMA
precisa ser incluído em qualquer módulo que use Animatable .
O componente animável inclui uma função usada para carregar-se no objeto da janela do aplicativo. Essa função é chamada defineCustomElements()
e precisa ser executada uma vez durante a inicialização do seu aplicativo. Um local conveniente para adicioná-lo é no arquivo main.ts
da seguinte maneira:
import { enableProdMode } from '@angular/core' ;
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' ;
import { defineCustomElements as defineAnimatable } from '@proyecto26/animatable-component/loader' ;
import { AppModule } from './app/app.module' ;
import { environment } from './environments/environment' ;
if ( environment . production ) {
enableProdMode ( ) ;
}
platformBrowserDynamic ( ) . bootstrapModule ( AppModule )
. catch ( err => console . log ( err ) ) ;
defineAnimatable ( window ) ;
da documentação do estêncil
Ao usar um componente wrapper, não é necessário acessar a referência diretamente para anexar eventos, etc. Mais detalhes aqui.
import React from 'react' ;
import {
AnimatableComponent ,
ANIMATIONS ,
EASING
} from '@proyecto26/animatable-component-react' ;
const App = ( ) => {
return (
< AnimatableComponent
autoPlay
delay = { 300 }
duration = { 800 }
composite = 'add'
direction = 'alternate'
iterations = { Infinity }
animation = { ANIMATIONS . TADA }
easing = { EASING . EASE_IN_OUT_BACK }
onStart = { ( ) => console . log ( 'Starting animation' ) }
onFinish = { ( ) => console . log ( 'Finished animation' ) }
onCancel = { ( ) => console . log ( 'Cancelled animation' ) }
>
< div >
< p > HELLO WORLD </ p >
</ div >
</ AnimatableComponent >
) ;
} ;
export default App ;
Outra opção é usar o componente web diretamente:
import React from 'react'
import ReactDOM from 'react-dom'
import { defineCustomElements as defineAnimatable } from '@proyecto26/animatable-component/loader'
import App from './App' ;
ReactDOM . render ( < App /> , document . getElementById ( 'root' ) ) ;
defineAnimatable ( window ) ;
da documentação do estêncil
Para usar o animatable-component
dentro de uma aplicação Vue, ele deve ser modificado para definir os elementos customizados e informar ao compilador Vue quais elementos ignorar durante a compilação. Tudo isso pode ser feito no arquivo main.js
da seguinte maneira:
import Vue from 'vue' ;
import { defineCustomElements as defineAnimatable } from '@proyecto26/animatable-component/loader'
import App from './App.vue' ;
Vue . config . productionTip = false ;
Vue . config . ignoredElements = [ / animatable-w* / ] ;
// Bind the custom element to the window object
defineAnimatable ( window ) ;
new Vue ( {
render : h => h ( App )
} ) . $mount ( '#app' ) ;
da documentação do estêncil
Para animar componentes funcionais você pode usar o utilitário createAnimatableComponent
, por exemplo:
utils.tsx
import {
createAnimatableComponent
} from '@proyecto26/animatable-component' ;
const SendMessageButton = ( props ) => (
< ion-fab-button { ... props } >
< ion-icon name = 'send' />
</ ion-fab-button >
) ;
export const AnimatableSendMessageButton = createAnimatableComponent ( SendMessageButton ) ;
export const keyFramesSendMessage : Keyframe [ ] = [
{
opacity : '0' ,
transform : 'rotate(0deg)'
} ,
{
opacity : '1' ,
transform : 'rotate(360deg)'
}
] ;
export const optionsSendMessage : KeyframeAnimationOptions = {
duration : 500 ,
easing : 'ease-in-out'
} ;
my-component.tsx
import { Component , Host , h } from '@stencil/core' ;
import { AnimatableSendMessageButton , keyFramesSendMessage , optionsSendMessage } from './utils'
@ Component ( {
tag : 'my-component' ,
shadow : false
} )
export class MyComponent {
render ( ) {
return (
< AnimatableSendMessageButton
autoPlay
keyFrames = { keyFramesSendMessage }
options = { optionsSendMessage }
onFinish = { ( ) => alert ( 'Eureka!' ) }
/>
)
}
}
Ao contribuir para este repositório, primeiro discuta a alteração que deseja fazer por meio de problema, e-mail ou qualquer outro método com os proprietários deste repositório antes de fazer uma alteração.
As contribuições são o que tornam a comunidade de código aberto um lugar incrível para aprender, inspirar e criar. Qualquer contribuição que você fizer será muito apreciada ❤️.
Você pode aprender mais sobre como contribuir para este projeto no guia de contribuições.
Eu acredito em unicórnios? Apoie-me, se você também.
Doe Ethereum , ADA , BNB , SHIBA , USDT/USDC , DOGE , etc:
Endereço da carteira: jdnichollsc.eth
Por favor, deixe-nos saber suas contribuições!
Disponível como parte da assinatura Tidelift.
Os mantenedores do <animatable/>
e de milhares de outros pacotes estão trabalhando com o Tidelift para fornecer suporte comercial e manutenção para as dependências de código aberto que você usa para construir seus aplicativos. Economize tempo, reduza riscos e melhore a integridade do código, enquanto paga os mantenedores das dependências exatas que você usa. Saber mais.
Para relatar uma vulnerabilidade de segurança, use o contato de segurança da Tidelift. A Tidelift coordenará a correção e divulgação.
Este repositório está disponível sob a licença MIT.
Feito com ❤️