Table des matières
Page HTML
Section CSS
JavaScript部分
Maison interface Web tutoriel HTML Créer un effet de parallaxe d'affiche Apple TV à l'aide de CSS3 et jQuery

Créer un effet de parallaxe d'affiche Apple TV à l'aide de CSS3 et jQuery

Jun 26, 2017 pm 03:17 PM
apple css css3 jquery 创建 海报

Utilisez CSS et jQuery pour l'implémenter, essayez de ressembler à l'effet original.


Rendu final

Dans ce tutoriel, j'utiliserai CSS, HTML et jQuery pour créer un effet de parallaxe Apple TV approximatif, si vous lisez ceci, je suppose que vous avez une compréhension de base des trois techniques ci-dessus.

Sans plus attendre, commençons la première partie.

Page HTML

Notre structure de page est la suivante :

<div class="poster">  <div class="shine"></div>
  <div class="layer-1"></div>
  <div class="layer-2"></div>
  <div class="layer-3"></div>
  <div class="layer-4"></div>
  <div class="layer-5"></div>
</div>
Copier après la connexion

Tout d'abord, nous avons besoin d'un .poster avec classe de style div , dans ce div contient 5 autres calques de style div. Au-dessus de ces cinq couches div il y a un shine div pour ajouter un peu d'éclat.

Section CSS

Tout d'abord, ajoutez le code suivant pour vous assurer que la hauteur de la section body de la page est la hauteur de la page entière :

body, html { height: 100%; min-height: 100%; }
Copier après la connexion

Donnez la section body un dégradé d'arrière-plan Couleur :

body { background: linear-gradient(to bottom, #f6f7fc 0%,#d5e1e8 40%); }
Copier après la connexion

Afin de donner à .poster un effet de rotation 3D, le conteneur parent doit définir des effets de perspective et de transformation. Comme nous pouvons le voir, le conteneur parent de div est body lui-même, ajoutez donc le code CSS suivant :

body {background: linear-gradient(to bottom, #f6f7fc 0%,#d5e1e8 40%);transform-style: preserve-3d;transform: perspective(800px);
}
Copier après la connexion

Maintenant, stylisez et dimensionnez la carte, centrez-la sur la page et ajoutez quelques coins arrondis Avec l'effet d'ombre :

.poster {width: 320px;height: 500px;position: absolute;top: 50%; left: 50%;margin: -250px 0 0 -160px;border-radius: 5px;box-shadow: 0 45px 100px rgba(0, 0, 0, 0.4);overflow:hidden;
}
Copier après la connexion

Afin de centrer l'affiche, vous devez définir la valeur de position sur absolute, top:50%, 'left:50%' et la valeur margin supérieure doit être div la moitié négative de la hauteur, la valeur margin gauche est la moitié négative de la div largeur. Ce qu'il faut retenir, c'est que le centre de .poster est aussi le centre de la page entière.


Effet d'ombre

Nous pouvons utiliser le sélecteur CSS suivant pour sélectionner tous les calques :

div[class *= &#39;layer-&#39;]
Copier après la connexion

.poster Il a été conçu, voyons l'effet.

Ainsi, CSS sélectionne tous les noms de classes qui contiennent "layer-" div.

Maintenant, définissez la valeur position de tous les calques sur absolute, la valeur background-repeat sur no-repeat, la valeur background-position sur top left et la taille du l'arrière-plan du calque doit avoir une largeur et une hauteur automatiques de 100 %.

div[class*="layer-"] {position: absolute;top: -10px; left: -10px;right: -10px; bottom: -10px;background-size: 100% auto;background-repeat: no-repeat;background-position: 0 0;transition:0.1s;
}
Copier après la connexion

Notez que les valeurs​​de top,left,right,bottom sont toutes de -10px. Le but est d'agrandir la taille du calque de 20px. que celui de poster, de sorte que dans chaque Lors de l'inspection du calque, vous ne verrez pas le bord du calque.

Voici comment ajouter un arrière-plan à chaque calque :

.layer-1 {background-image: url(&#39;http://designmodo.com/demo/apple-tv-parallax/images/1.png&#39;);
}.layer-2 {background-image: url(&#39;http://designmodo.com/demo/apple-tv-parallax/images/2.png&#39;);
}.layer-3 {top: 0; bottom: 0;left: 0; right: 0;background-image: url(&#39;http://designmodo.com/demo/apple-tv-parallax/images/3.png&#39;);
}.layer-4 {background-image: url(&#39;http://designmodo.com/demo/apple-tv-parallax/images/4.png&#39;);
}.layer-5 {background-image: url(&#39;http://designmodo.com/demo/apple-tv-parallax/images/5.png&#39;);
}
Copier après la connexion

Dans la section layer-3, les calques ne bougeront pas, il n'est donc pas nécessaire que la taille soit trop grande .


Effet statique complet

JavaScript部分

在开始之前,请确保已经引入了jQuery库,否则会报错的。

视差效果的逻辑是这样的,每当鼠标移动的时候,根据光标的位置,.postertransforms:translateY,rotate,rotateY 属性将会改变。光标距离页面左上角越远,动画的效果越明显。

公式就类似于这样的:offsetX=0.5-光标距离页面顶端的位置/宽度。

为了每个元素的值都不一样,将给每一个光标公式返回的值乘以一个自定义的值,返回HTML的代码给每个会有动画的层元素添加 data-offset=数字 的属性。

<div data-offset="15" class="poster">
    <div class="shine"></div>
    <div data-offset="-2" class="layer-1"></div>
    <div class="layer-2"></div>
    <div data-offset="1" class="layer-3"></div>
    <div data-offset="3" class="layer-4"></div>
    <div data-offset="10" class="layer-5"></div>
</div>
Copier après la connexion

每一个 .layers 的规则都相同,但是我们给他们应用到 translateYtranslateX 属性上。

data-offset 属性的值越大,动画的效果越明显,可以改变这些值体验下。

为了代码可读性,我们在JavaScript里给 .poster 赋值给 $poster 变量,.shine$shine 变量,$layer 变量代表所有层,w,h代表页面的宽度和高度。

var $poster = $(&#39;.poster&#39;),$shine = $(&#39;.shine&#39;),$layer = $(&#39;div[class*="layer-"]’);
Copier après la connexion

现在,需要考虑下当光标移动的时候获取到光标位置的问题。我们可以用 $(window)mousemove 事件来实现,这个事件会返回一个JavaScript对象,含有我们需要的位置信息和其他一些我们暂时还用不到的变量。

$(window).on(&#39;mousemove&#39;, function(e) {var w=e.currentTarget.innerWidth,h=e.currentTarget.innerHeight;var offsetX = 0.5 - e.pageX / w, /* where e.pageX is our cursor X coordinate */
    offsetY = 0.5 - e.pageY / h,
    offsetPoster = $poster.data(&#39;offset&#39;), /* custom value for animation depth */
    transformPoster = &#39;translateY(&#39; + -offsetX * offsetPoster + &#39;px) rotateX(&#39; + (-offsetY * offsetPoster) + &#39;deg) rotateY(&#39; + (offsetX * (offsetPoster * 2)) + &#39;deg)&#39;;/* apply transform to $poster */
    $poster.css(&#39;transform&#39;, transformPoster);/* parallax foreach layer *//* loop thought each layer *//* get custom parallax value *//* apply transform */
    $layer.each(function() {var $this = $(this);var offsetLayer = $this.data(&#39;offset&#39;) || 0; /* get custom parallax value, if element docent have data-offset, then its 0 */var transformLayer = &#39;translateX(&#39; + offsetX * offsetLayer + &#39;px) translateY(&#39; + offsetY * offsetLayer + &#39;px)&#39;;

        $this.css(&#39;transform&#39;, transformLayer);
    });
});
Copier après la connexion

下一步,就是用上面解释的公式来计算offsetYoffsetX的值,然后就是把视差效果应用到.posert和每一个海报层。

非常酷啊,现在我们就有了一个有视差效果的小部件了。


基本完成

但是还没完,海报上的光泽部分还没设置

现在回到CSS部分,给.shine div 绝对定位,添加一个渐变颜色效果,设置z-index属性值为100,让它在所有层的上面。

.shine {position: absolute;top: 0; left: 0; right: 0; bottom: 0;background: linear-gradient(90deg, rgba(255,255,255,.5) 0%,rgba(255,255,255,0) 60%);z-index: 100;
}
Copier après la connexion

已经有了一个漂亮的闪光层在海报上,但是为了达到更逼真的效果,光照应该随着光标的移动而变化。


更逼真些

我们怎么做呢?可能你还记得无聊的初三数学课,当你想着你在学一些你从来都不会用到的公式的时候,我们现在就用到了。

所以,倾斜的角度应该等于光标与海报中心形成三角形的角度的相反值。(还记得吧,海报的中心就是整个页面的中心啊,也就是页面宽度和高度的二分之一)


角度示意图

首先,找到光标与页面中心形成的三角形的直角边,光标与中心连线后作出一个直角三角形。

然后用 Math.atan2() 函数得到中心点的角度值。注意这个函数的返回值使用弧度值来表示的,所以我们得在CSS中转换成角的度数,用以下公式:

弧度值*180/pi = 角度值

var $poster = $(&#39;.poster&#39;);var $shine = $(&#39;.shine&#39;);var $layer = $(&#39;div[class *= "layer-"]&#39;);

    $poster.data("offset",15);

    $(window).on(&#39;mousemove&#39;, function(e) {var w=e.currentTarget.innerWidth,h=e.currentTarget.innerHeight;var offsetX = 0.5 - e.pageX / w, /* where e.pageX is our cursor X coordinate */
        offsetY = 0.5 - e.pageY / h,
        offsetPoster = $poster.data(&#39;offset&#39;), /* custom value for animation depth */
        transformPoster = &#39;translateY(&#39; + -offsetX * offsetPoster + &#39;px) rotateX(&#39; + (-offsetY * offsetPoster) + &#39;deg) rotateY(&#39; + (offsetX * (offsetPoster * 2)) + &#39;deg)&#39;;

        dy = e.pageY - h / 2,
        dx = e.pageX - w / 2,
        theta = Math.atan2(dy,dx), /* get angle in radians */
        angle = theta * 180 / Math.PI; /* convert rad in degrees *//* apply transform to $poster */
        $poster.css(&#39;transform&#39;, transformPoster);/* parallax foreach layer *//* loop thought each layer *//* get custom parallax value *//* apply transform */
        $layer.each(function() {var $this = $(this);var offsetLayer = $this.data(&#39;offset&#39;) || 0; /* get custom parallax value, if element docent have data-offset, then its 0 */var transformLayer = &#39;translateX(&#39; + offsetX * offsetLayer + &#39;px) translateY(&#39; + offsetY * offsetLayer + &#39;px)&#39;;

            $this.css(&#39;transform&#39;, transformLayer);
        });
    });
Copier après la connexion

你会发现角度值的范围是从-180到180度,以下代码修复这个问题让角度值从0-360度:

if (angle < 0) {angle = angle + 360;
}
Copier après la connexion

现在角度有了,就可以随着光标的移动来动态改变渐变颜色的角度值:

<code class="lsl">$shine.css(&#39;background&#39;, &#39;linear-gradient(&#39; + (angle - <span class="hljs-number">90) + &#39;deg, rgba(<span class="hljs-number">255,<span class="hljs-number">255,<span class="hljs-number">255,&#39; + e.pageY / h + &#39;) <span class="hljs-number">0%,rgba(<span class="hljs-number">255,<span class="hljs-number">255,<span class="hljs-number">255,<span class="hljs-number">0) <span class="hljs-number">80%)&#39;);<br/><br/></span></span></span></span></span></span></span></span></span></span></code>
Copier après la connexion

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
343599877,我们一起学前端!

注意 :减去90度的原因是 linear-gradient 属性的需要,如果你使用 -webkit-linear-gradient,-moz-linear-gradient属性就没有必要。

转译

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 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

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)

Comment supprimer le style par défaut dans la liste Bootstrap? Comment supprimer le style par défaut dans la liste Bootstrap? Apr 07, 2025 am 10:18 AM

Le style par défaut de la liste bootstrap peut être supprimé avec CSS Override. Utilisez des règles et sélecteurs CSS plus spécifiques, suivez le «principe de proximité» et le «principe de poids», en remplacement du style par défaut de bootstrap. Pour éviter les conflits de style, des sélecteurs plus ciblés peuvent être utilisés. Si le remplacement est infructueux, ajustez le poids du CSS personnalisé. Dans le même temps, faites attention à l'optimisation des performances, évitez la surutilisation de! Importante et écrivez le code CSS concis et efficace.

Comment construire un framework bootstrap Comment construire un framework bootstrap Apr 07, 2025 pm 12:57 PM

Pour créer un framework bootstrap, suivez ces étapes: Installez Bootstrap via CDN ou installez une copie locale. Créez un document HTML et liez Bootstrap CSS à & lt; head & gt; section. Ajoutez un fichier JavaScript bootstrap au & lt; body & gt; section. Utilisez le composant bootstrap et personnalisez la feuille de style en fonction de vos besoins.

Comment utiliser le bouton bootstrap Comment utiliser le bouton bootstrap Apr 07, 2025 pm 03:09 PM

Comment utiliser le bouton bootstrap? Introduisez Bootstrap CSS pour créer des éléments de bouton et ajoutez la classe de bouton bootstrap pour ajouter du texte du bouton

Comment insérer des photos sur bootstrap Comment insérer des photos sur bootstrap Apr 07, 2025 pm 03:30 PM

Il existe plusieurs façons d'insérer des images dans Bootstrap: insérer directement les images, en utilisant la balise HTML IMG. Avec le composant d'image bootstrap, vous pouvez fournir des images réactives et plus de styles. Définissez la taille de l'image, utilisez la classe IMG-FLUID pour rendre l'image adaptable. Réglez la bordure en utilisant la classe IMG-border. Réglez les coins arrondis et utilisez la classe Roundée IMG. Réglez l'ombre, utilisez la classe Shadow. Redimensionner et positionner l'image, en utilisant le style CSS. À l'aide de l'image d'arrière-plan, utilisez la propriété CSS d'image d'arrière-plan.

Comment redimensionner le bootstrap Comment redimensionner le bootstrap Apr 07, 2025 pm 03:18 PM

Pour ajuster la taille des éléments dans Bootstrap, vous pouvez utiliser la classe de dimension, qui comprend: ajuster la largeur: .col-, .w-, .mw-ajustement Hauteur: .h-, .min-h-, .max-h-

Comment télécharger des fichiers sur bootstrap Comment télécharger des fichiers sur bootstrap Apr 07, 2025 pm 01:09 PM

La fonction de téléchargement de fichiers peut être implémentée via Bootstrap. Les étapes sont les suivantes: introduire les fichiers Bootstrap CSS et JavaScript; créer des champs d'entrée de fichier; créer des boutons de téléchargement de fichiers; gérer les téléchargements de fichiers (à l'aide de FormData pour collecter des données, puis envoyer au serveur); style personnalisé (facultatif).

Comment disposer bootstrap Comment disposer bootstrap Apr 07, 2025 pm 02:24 PM

Pour utiliser Bootstrap pour disposer d'un site Web, vous devez utiliser un système de grille pour diviser la page en conteneurs, lignes et colonnes. Ajoutez d'abord le conteneur, puis ajoutez les lignes dedans, ajoutez les colonnes dans la ligne et enfin ajoutez le contenu dans la colonne. La fonction de mise en page réactive de Bootstrap ajuste automatiquement la disposition en fonction des points d'arrêt (XS, SM, MD, LG, XL). Différentes dispositions sous différentes tailles d'écran peuvent être réalisées en utilisant des classes réactives.

Comment vérifier la date de bootstrap Comment vérifier la date de bootstrap Apr 07, 2025 pm 03:06 PM

Pour vérifier les dates dans Bootstrap, suivez ces étapes: introduisez les scripts et styles requis; initialiser le composant de sélecteur de date; Définissez l'attribut Data-BV-Date pour activer la vérification; Configurer les règles de vérification (telles que les formats de date, les messages d'erreur, etc.); Intégrez le cadre de vérification de bootstrap et vérifiez automatiquement l'entrée de date lorsque le formulaire est soumis.

See all articles