{"id":2752,"date":"2012-07-30T08:56:40","date_gmt":"2012-07-30T06:56:40","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=2752"},"modified":"2016-09-10T20:20:19","modified_gmt":"2016-09-10T18:20:19","slug":"jquery-inview-plugin-elements-visibles-a-ecran","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/jquery-inview-plugin-elements-visibles-a-ecran","title":{"rendered":"jQuery \u2013 InView : d\u00e9clencher des actions en fonction des \u00e9l\u00e9ments visibles \u00e0 l&rsquo;\u00e9cran."},"content":{"rendered":"<p>Le plugin jQuery InView permet de d\u00e9clencher des actions en JavaScript en fonction de l&rsquo;apparition \u00e0 l&rsquo;\u00e9cran d&rsquo;un \u00e9l\u00e9ment ou d&rsquo;une partie de cet \u00e9l\u00e9ment. Il est donc facile d&rsquo;imaginer toutes sortes de succession d&rsquo;animations ou d&rsquo;actions asynchrones gr\u00e2ce \u00e0 ce plugin. Voyons comment l&rsquo;utiliser.<!--more--><\/p>\n<p class=\"message\">J&rsquo;entends d\u00e9j\u00e0 des personnes crier au scandale \u00e0 cause de la d\u00e9pendance \u00e0 jQuery. Il existe un alternative datant de 2016. <a href=\"https:\/\/camwiegert.github.io\/in-view\/\">In-View.js<\/a>.<\/p>\n<h2>O\u00f9 le trouver<\/h2>\n<p>Cela se passe sur GitHub, il est donc possible de t\u00e9l\u00e9charger le script, mais \u00e9galement de l&rsquo;am\u00e9liorer et partager vos suggestions.<br \/>\n<a class=\"download\" href=\"https:\/\/github.com\/protonet\/jquery.inview\/\">T\u00e9l\u00e9charger InView<\/a><\/p>\n<h2>Comment l&rsquo;utiliser ?<\/h2>\n<p>Commencez simplement par appeler votre biblioth\u00e8que jQuery, puis chargez le plugin InView :<\/p>\n<pre class=\"code\"><code class=\"html boc-nocontrols boc-nogutter\">&lt;script src=\"https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.7.2\/jquery.min.js\"&gt;&lt;\/script&gt;\r\n&lt;script src=\"js\/jquery.inview.min.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>Une fois le plugin charg\u00e9, il est possible de \u00ab\u00a0binder\u00a0\u00bb, autrement dit de lier un \u00e9l\u00e9ment \u00e0 l&rsquo;\u00e9v\u00e8nement \u00ab\u00a0inview\u00a0\u00bb pour effectuer des actions.<\/p>\n<pre class=\"code\"><code class=\"javascript boc-nocontrols boc-nogutter\">$('.element').bind('inview',function(event, isInView, visiblePartX, visiblePartY){\r\n  \t\t\t\/\/ le code ici (\u00e7a va venir)\r\n});<\/code><\/pre>\n<p>La fonction accepte plusieurs variables qui vont nous permettre d&rsquo;ex\u00e9cuter les choses au bon moment.<br \/>\nLe deuxi\u00e8me param\u00e8tre (et variable) <code>isInView<\/code> retourne <code>true<\/code> ou <code>false<\/code> en fonction de si l&rsquo;\u00e9l\u00e9ment est visible ou non (peu importe quelle partie est visible). <code>visiblePartX<\/code>, la troisi\u00e8me variable d\u00e9tecte quelle partie lat\u00e9rale de l&rsquo;\u00e9l\u00e9ment est visible (sur l&rsquo;axe X donc), les valeurs retourn\u00e9es possibles sont <code>left<\/code>, <code>right<\/code> et <code>both<\/code>.<br \/>\nLa derni\u00e8re est <code>visiblePartY<\/code> et d\u00e9tecte quelle partie en hauteur de l&rsquo;\u00e9l\u00e9ment est visible (sur l&rsquo;axe Y donc), les valeurs retourn\u00e9es possibles sont <code>top<\/code>, <code>bottom<\/code> et <code>both<\/code>.<\/p>\n<p>Nous allons concevoir une b\u00eate d\u00e9monstration pour comprendre les bases.<\/p>\n<h2>D\u00e9finir les parties visibles d&rsquo;un \u00e9l\u00e9ment<\/h2>\n<p>Nous allons essayer d&rsquo;afficher un contenu textuel qui nous dit quelle partie est visible de deux \u00e9l\u00e9ments d&rsquo;une page HTML.<br \/>\nCommencez par copier\/coller ce code HTML (rien de compliqu\u00e9).<\/p>\n<pre class=\"code\"><code class=\"html boc-nocontrols boc-nogutter\">&lt;div id=\"first-part\"&gt;\r\n   &lt;h2&gt;This is the first part&lt;\/h2&gt;\r\n   &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat\tproident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;\/p&gt; \r\n   &lt;span class=\"info\"&gt;&lt;\/span&gt;\r\n&lt;\/div&gt;\r\n&lt;div id=\"second-part\"&gt;\r\n   &lt;h2&gt;This is the second part&lt;\/h2&gt;\r\n   &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse \t\tcillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;\/p&gt;\r\n&lt;\/div&gt; \r\n&lt;div id=\"third-part\"&gt; \r\n   &lt;h2&gt;This is the third part&lt;\/h2&gt;\r\n   &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;\/p&gt;\r\n&lt;\/div&gt;\r\n&lt;div id=\"last-part\"&gt; \r\n   &lt;h2&gt;This is the last part&lt;\/h2&gt;\r\n   &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non \tproident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;\/p&gt;\r\n   &lt;span class=\"info\"&gt;&lt;\/span&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 mettre plus de contenu pour prendre un peu de hauteur dans votre document.<\/p>\n<p>Je vous fourni \u00e9galement ce CSS pour que l&rsquo;on ait \u00e0 peu pr\u00e8s le m\u00eame document de test :<\/p>\n<pre class=\"code\"><code class=\"css boc-nocontrols boc-nogutter\">html {\r\n\twidth: 750px;\r\n\tmargin: 0 auto;\r\n\tpadding: 2em 0;\r\n\tfont-size: 62.5%;\r\n\tline-height: 1.55em;\r\n\tbackground: #f2f2f2;\r\n\tcolor: #555;\r\n\tfont-family: Helvetica, Arial, Verdana, sans-serif;\r\n}\r\nbody {\r\n\tfont-size: 1.4em;\r\n\tline-height: 1.55em;\r\n}\r\ndiv {\r\n\tmargin: 4em 0;\r\n\tposition:relative;\r\n}\r\n.info {\r\n\tposition: absolute;\r\n\tright: 0;\r\n\ttop:0;\r\n\tpadding: 15px;\r\n\tborder-radius: 8px;\r\n\tbackground: #ddd;\r\n\tborder: 1px solid #fff;\r\n\tcolor: #666;\r\n\tfont-weight:bold;\r\n\tfont-size: 16px;\r\n\tbox-shadow: 2px 2px 3px rgba(0,0,0,0.4);\r\n}<\/code><\/pre>\n<p>L&rsquo;\u00e9l\u00e9ment <code>.info<\/code> va nous servir \u00e0 afficher du texte.<\/p>\n<p>Reprenons sur du JS, ce JavaScript est \u00e0 placer apr\u00e8s l&rsquo;appel \u00e0 la biblioth\u00e8que jQuery et son plugin, bien entendu \ud83d\ude09<br \/>\nNous allons analyser avec notre code JS quelles sont les zones visibles sur notre premi\u00e8re division et sur la derni\u00e8re division de notre document.<\/p>\n<pre class=\"code\"><code class=\"javascript boc-nocontrols\">$(document).ready(function(){\r\n   $('.element').bind('inview', function(event, isInView, visiblePartX, visiblePartY) {\r\n\u00a0\r\n      if (isInView) {\r\n         \/\/ l'\u00e9l\u00e9ment est visible\r\n\u00a0\r\n         if (visiblePartY == 'top') {\r\n            \/\/ Le haut de l'\u00e9l\u00e9ment est visible\r\n            $(this).find('.info').text('Only top is visible');\r\n         } \r\n\u00a0\r\n         else if (visiblePartY == 'bottom') {\r\n            \/\/ Le bas de l'\u00e9l\u00e9ment est visible\r\n            $(this).find('.info').text('Only bottom is visible');\r\n         } \r\n\u00a0\r\n         else {\r\n            \/\/ Les deux parties sont visibles (tout l'\u00e9l\u00e9ment)\r\n            $(this).find('.info').text('Whole part is visible');\r\n         }\r\n      } \r\n\u00a0\r\n      else {\r\n         \/\/ l'\u00e9l\u00e9ment n'est pas visible\r\n         \/\/ on fait quoi maintenant ?\r\n      }\r\n   });\r\n});<\/code><\/pre>\n<p>Ici le code est vraiment basique, nous ne faisons qu&rsquo;ajouter du texte dans un \u00e9l\u00e9ment <code class=\"element\">span<\/code> porteur de la classe <code>info<\/code> en fonction de la zone visible d&rsquo;un \u00e9l\u00e9ment.<br \/>\nVoici ce que vous devriez obtenir :<br \/>\n<a class=\"demonstration\" href=\"\/blog\/doc\/jquery-inview\/\">Voir la d\u00e9monstration<\/a><br \/>\nAmusez-vous \u00e0 faire d\u00e9filer doucement la page pour voir ce qui s&rsquo;affiche dans les blocs d&rsquo;informations en haut et bas de la page.<\/p>\n<p>Avec les quelques commentaires du code jQuery vous devriez maintenant avoir compris le fonctionnement du plugin. \u00c0 vous d&rsquo;envisager une suite ! :p (Lazy Load, chargement Ajax, infinite scroll, etc.)<br \/>\nDes exemples plus complexes sont donn\u00e9s par l&rsquo;auteur de ce plugin sur GitHub.<br \/>\n<a href=\"https:\/\/github.com\/protonet\/jquery.inview\/\">Plugin sur GitHub<\/a><\/p>\n<p>Amusez-vous bien !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le plugin jQuery InView permet de d\u00e9clencher des actions en JavaScript en fonction de l&rsquo;apparition \u00e0 l&rsquo;\u00e9cran d&rsquo;un \u00e9l\u00e9ment ou d&rsquo;une partie de cet \u00e9l\u00e9ment. Il est donc facile d&rsquo;imaginer toutes sortes de succession d&rsquo;animations ou d&rsquo;actions asynchrones gr\u00e2ce \u00e0 ce plugin. Voyons comment l&rsquo;utiliser.<\/p>\n","protected":false},"author":4,"featured_media":2781,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[610,50,9],"tags":[478,125,52,51],"coauthors":[597],"class_list":["post-2752","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","category-ressources-telechargements","category-tutoriels","tag-inview","tag-javascript","tag-jquery","tag-plugin"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=2752"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2752\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/2781"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=2752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=2752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=2752"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=2752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}