Maison interface Web Tutoriel H5 HTML5 et Webkit implémentent une animation de chute de feuilles

HTML5 et Webkit implémentent une animation de chute de feuilles

Dec 29, 2017 pm 05:07 PM
html5 web webkit

Quel type d'animation HTML5 et Webkit peuvent-ils réaliser ensemble ? Cet article partagera avec vous un exemple de code pour présenter l'implémentation de l'effet d'animation de chute de feuilles basé sur HTML5+Webkit. Les amis qui en ont besoin peuvent s'y référer. J'espère que cela pourra aider tout le monde.

Pour obtenir l'effet comme indiqué sur l'image (feuilles qui tombent) :

code html :

<!DOCTYPE html>
<html>
<head>
    <title>HTML5树叶飘落动画</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=500px, initial-scale=0.64">
    <link rel="stylesheet" href="leaves.css" type="text/css">
    <script src="leaves.js" type="text/javascript"></script>
</head>
<body>
    <p id="container">
        <p id="leafContainer"></p>
        <p id="message">
            <em>这是基于webkit的落叶动画</em>
        </p>
    </p>  
</body>
</html>
css代码:
body{
    background-color: #4E4226;
}
#container {
    position: relative;
    height: 700px;
    width: 500px;
    margin: 10px auto;
    overflow: hidden;
    border: 4px solid #5C090A;
    background: #4E4226 url('images/backgroundLeaves.jpg') no-repeat top left;
}
#leafContainer {
    position: absolute;
    width: 100%;
    height: 100%;
}
#message{
    position: absolute;
    top: 160px;
    width: 100%;
    height: 300px;
    background:transparent url('images/textBackground.png') repeat-x center;
    color: #5C090A;
    font-size: 220%;
    font-family: 'Georgia';
    text-align: center;
    padding: 20px 10px;
    -webkit-box-sizing: border-box;
    -webkit-background-size: 100% 100%;
    z-index: 1;
}
em {
    font-weight: bold;
    font-style: normal;
}
#leafContainer > p {
    position: absolute;
    width: 100px;
    height: 100px;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: normal;
    -webkit-animation-timing-function: linear;
}
#leafContainer > p > img {
     position: absolute;
     width: 100px;
     height: 100px;
     -webkit-animation-iteration-count: infinite;
     -webkit-animation-direction: alternate;
     -webkit-animation-timing-function: ease-in-out;
     -webkit-transform-origin: 50% -100%;
}
@-webkit-keyframes fade{
    0%   { opacity: 1; }
    95%  { opacity: 1; }
    100% { opacity: 0; }
}
@-webkit-keyframes drop{
    0%   { -webkit-transform: translate(0px, -50px); }
    100% { -webkit-transform: translate(0px, 650px); }
}
@-webkit-keyframes clockwiseSpin{
    0%   { -webkit-transform: rotate(-50deg); }
    100% { -webkit-transform: rotate(50deg); }
}
@-webkit-keyframes counterclockwiseSpinAndFlip {
    0%   { -webkit-transform: scale(-1, 1) rotate(50deg); }
    100% { -webkit-transform: scale(-1, 1) rotate(-50deg); }
}
js代码:
const NUMBER_OF_LEAVES = 30;
function init(){
    var container = document.getElementById('leafContainer');
    for (var i = 0; i < NUMBER_OF_LEAVES; i++) {
        container.appendChild(createALeaf());
    }
}
function randomInteger(low, high){
    return low + Math.floor(Math.random() * (high - low));
}
function randomFloat(low, high){
    return low + Math.random() * (high - low);
}
function pixelValue(value){
    return value + 'px';
}
function durationValue(value){
    return value + 's';
}
function createALeaf(){
    var leafp = document.createElement('p');
    leafp.style.top = "-100px";
    leafp.style.left = pixelValue(randomInteger(0, 500));
    leafp.style.webkitAnimationName = 'fade, drop';
    var fadeAndDropDuration = durationValue(randomFloat(5, 11));
    leafp.style.webkitAnimationDuration = fadeAndDropDuration + ', ' + fadeAndDropDuration;
    var leafDelay = durationValue(randomFloat(0, 5));
    leafp.style.webkitAnimationDelay = leafDelay + ', ' + leafDelay;
    var image = document.createElement('img');
    image.src = 'images/realLeaf' + randomInteger(1, 5) + '.png';
    var spinAnimationName = (Math.random() < 0.5) ? 'clockwiseSpin' : 'counterclockwiseSpinAndFlip';
    image.style.webkitAnimationName = spinAnimationName;
    var spinDuration = durationValue(randomFloat(4, 8));
    image.style.webkitAnimationDuration = spinDuration;
    leafp.appendChild(image);
    return leafp;
}
window.addEventListener('load', init, false);
Copier après la connexion

PS : Voir ci-dessous Traitez les images à cadre continu sous un canevas html5 Le code suivant est basé sur IE8 ou supérieur

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>Canvas Demo</title>
<script>
var canvas = null;//初始化参数
var img = null;
var ctx = null;
var imageReady = false;
window.onload = function() {
    var canvas = document.getElementById("animation_canvas");
    canvas.width = canvas.parentNode.clientWidth;
    canvas.height = canvas.parentNode.clientHeight;
    if (!canvas.getContext) {
        console.log("Canvas not supported. Please install a HTML5 compatible browser.");
        return;
    }   
    // get 2D context of canvas and draw rectangel
    ctx = canvas.getContext("2d");
    ctx.fillStyle="black";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    console.log(canvas.height);
    img = document.createElement('img');
    img.src = "images/ab0.png";
    img.onload = loaded();
}  
//保证只有图像加载后才开始循环动画
function loaded() {
    imageReady = true;
    setTimeout( update, 1000/3);//添加3帧每秒间隔计时器
}
function redraw() {
    ctx.fillStyle="black";
    ctx.fillRect(0, 0, 460, 460);
    ctx.drawImage(img, 0, 0, 232, 180);
}   
//为了让图片以规定的速度动画,我们必须追踪已经经过的时间,然后根据分配给每帧的时间播放帧。基本步骤是:
//1、按每秒几帧设置动画速度(msPerFrame)。
//2、当你循环游戏时,计算一下自最后一帧以后已经经过了多少时间(delta)。
//3、如果已经经过的时间足够把动画帧播完,那么播放这一帧并设置累积delta为0。
//4、如果已经经过的时间不够,那么记住(累积)delta时间(acDelta)。
var frame = 0;
var lastUpdateTime = 0;
var acDelta = 0;
var msPerFrame = 200;
function update() {
    requestAnimFrame(update);
    var delta = Date.now() - lastUpdateTime;
    //console.log(Date.now(),lastUpdateTime);
    if (acDelta > msPerFrame){
        acDelta = 0;
        redraw();
        img.src='images/ab'+frame+'.png';
        frame++; 
        if(frame >= 3) frame = 0; //当绘制后且帧推进完,计时器就会重置。
    }else{
        acDelta += delta;
    }
    lastUpdateTime = Date.now();
}
//requestAnimFrame的作用基本上就是setTimeout,但浏览器知道你正在渲染帧,所以它可以优化绘制循环,以及如何与剩下的页面回流。
//在某些情况下,setTimeout比requestAnimFrame更好用,特别是对于手机。
//以下是在不同的浏览器上调用requestAnimFrame的情况也不同,标准的检测方法如下:
window.requestAnimFrame = (function(){
    return window.requestAnimationFrame ||
            window.webkitRequestAnimationFrame ||
            window.mozRequestAnimationFrame ||
            window.oRequestAnimationFrame ||
            window.msRequestAnimationFrame ||
            function( callback ){
                window.setTimeout(callback, 1000 / 3); //如果requestAnimFrame支持不可用,还是可以用回内置的setTimeout。
            };
})();
</script>
</head>
<body style="position:absolute;margin:0;padding:0;width:100%;height:100%;">
    <canvas id="animation_canvas"></canvas>
</body>
</html>
Copier après la connexion

Recommandations associées :

Utilisez Html5 pour obtenir l'effet de feuilles qui tombent

jQuery+CSS3 réalise l'effet spécial de la chute des feuilles_jquery

Réaliste HTML5 feuille tombante animation_html5 compétences tutorielles

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Bordure de tableau en HTML Bordure de tableau en HTML Sep 04, 2024 pm 04:49 PM

Guide de la bordure de tableau en HTML. Nous discutons ici de plusieurs façons de définir une bordure de tableau avec des exemples de bordure de tableau en HTML.

Tableau imbriqué en HTML Tableau imbriqué en HTML Sep 04, 2024 pm 04:49 PM

Ceci est un guide des tableaux imbriqués en HTML. Nous discutons ici de la façon de créer un tableau dans le tableau ainsi que des exemples respectifs.

Marge gauche HTML Marge gauche HTML Sep 04, 2024 pm 04:48 PM

Guide de la marge HTML gauche. Nous discutons ici d'un bref aperçu de la marge gauche HTML et de ses exemples ainsi que de son implémentation de code.

Disposition du tableau HTML Disposition du tableau HTML Sep 04, 2024 pm 04:54 PM

Guide de mise en page des tableaux HTML. Nous discutons ici des valeurs de la mise en page des tableaux HTML ainsi que des exemples et des résultats en détail.

Liste ordonnée HTML Liste ordonnée HTML Sep 04, 2024 pm 04:43 PM

Guide de la liste ordonnée HTML. Ici, nous discutons également de l'introduction de la liste et des types HTML ordonnés ainsi que de leur exemple respectivement.

Espace réservé d'entrée HTML Espace réservé d'entrée HTML Sep 04, 2024 pm 04:54 PM

Guide de l'espace réservé de saisie HTML. Nous discutons ici des exemples d'espace réservé d'entrée HTML ainsi que des codes et des sorties.

Déplacer du texte en HTML Déplacer du texte en HTML Sep 04, 2024 pm 04:45 PM

Guide pour déplacer du texte en HTML. Nous discutons ici d'une introduction, du fonctionnement des balises de sélection avec la syntaxe et des exemples à implémenter.

Bouton HTML onclick Bouton HTML onclick Sep 04, 2024 pm 04:49 PM

Guide du bouton HTML onclick. Nous discutons ici de leur introduction, de leur fonctionnement, des exemples et de l'événement onclick dans divers événements respectivement.

See all articles