{"id":229633,"date":"2022-11-24T18:53:00","date_gmt":"2022-11-24T15:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229633"},"modified":"2022-11-09T11:32:55","modified_gmt":"2022-11-09T08:32:55","slug":"elementy-dynamiczne-elementy-statyczne-programy-obslugi-zdarzen-i-ich-zlozonosc","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/elementy-dynamiczne-elementy-statyczne-programy-obslugi-zdarzen-i-ich-zlozonosc\/","title":{"rendered":"Elementy dynamiczne, elementy statyczne, programy obs\u0142ugi zdarze\u0144 i ich z\u0142o\u017cono\u015b\u0107"},"content":{"rendered":"\n<p>Praca z elementami skumulowanymi na stronie, z kt\u00f3rych niekt\u00f3re s\u0105 zakotwiczeniami, a inne s\u0105 elementami z obs\u0142ug\u0105 zdarze\u0144, mo\u017ce czasami powodowa\u0107 dziwne zachowanie.<\/p>\n<p>Ostatecznie wszystko ma zwi\u0105zek z propagacj\u0105 wydarze\u0144, ale je\u015bli nie mia\u0142e\u015b do czynienia z tym (lub bulgotanie wydarze\u0144 lub co\u015b w tym stylu), mo\u017ce to by\u0107 troch\u0119 wyzwaniem.<\/p>\n<p>A oto przyk\u0142ad: A je\u015bli masz obraz, kt\u00f3ry jest owini\u0119ty w kotwic\u0119. Co si\u0119 stanie, gdy dynamiczny element zostanie umieszczony za pomoc\u0105 JavaScript po za\u0142adowaniu strony, kt\u00f3ra wczytuje inny element dynamiczny? Co wi\u0119cej, chcesz, aby strona nie przekierowywa\u0142a si\u0119 po klikni\u0119ciu elementu dynamicznego, ale nadal nie przekierowywa\u0142a po klikni\u0119ciu obrazu?<\/p>\n<p>To mo\u017ce wydawa\u0107 si\u0119 proste \u2013 aw niekt\u00f3rych przypadkach tak jest \u2013 ale je\u015bli masz przezroczysty element nak\u0142adaj\u0105cy si\u0119 na ca\u0142y, oryginalny obraz, mo\u017ce to sta\u0107 si\u0119 zupe\u0142nie innym wyzwaniem.<\/p>\n<p>W tym miejscu w gr\u0119 wchodzi zrozumienie cel\u00f3w wydarze\u0144. Ale zanim przejd\u0119 do rozwi\u0105zania tego problemu, spr\u00f3buj\u0119 sprowadzi\u0107 wszystko do prostszego wyja\u015bnienia i przedstawi\u0107 diagram, jak jest renderowany w DOM.<\/p>\n<h2>Elementy dynamiczne, elementy statyczne i programy obs\u0142ugi zdarze\u0144<\/h2>\n<p>Spr\u00f3buj wi\u0119c to sobie wyobrazi\u0107: Masz\u2026<\/p>\n<ul>\n<li>Strona, kt\u00f3ra ma obraz i obraz jest zawini\u0119ty w kotwic\u0119, kt\u00f3ra przeniesie Ci\u0119, powiedzmy, na inn\u0105 stron\u0119.<\/li>\n<li>Po za\u0142adowaniu strony tworzone s\u0105 dwa elementy dynamiczne. Po klikni\u0119ciu pierwszego elementu powinien wy\u015bwietli\u0107 si\u0119 drugi element dynamiczny.<\/li>\n<li>Klikni\u0119cie pierwszej dynamiki nie powinno przekierowywa\u0107 strony.<\/li>\n<li>Po klikni\u0119ciu oryginalnego obrazu powinien zachowywa\u0107 si\u0119 zgodnie z oczekiwaniami.<\/li>\n<\/ul>\n<p>Najtrudniejsz\u0105 cz\u0119\u015bci\u0105 tego jest to, \u017ce dynamiczne elementy s\u0105 umieszczane na istniej\u0105cej kombinacji kotwicy i obrazu.<\/p>\n<h3>Spojrzenie na DOM<\/h3>\n<p>Oznacza to, \u017ce DOM wygl\u0105da\u0142by mniej wi\u0119cej tak:<\/p>\n<p>Uwaga na obrazku powy\u017cej <strong>kotwicy<\/strong> wyzwala <strong>obraz<\/strong>, a <strong>element dynamiczny<\/strong> wyzwala <strong>nak\u0142adk\u0119 dynamiczn\u0105<\/strong>.<\/p>\n<p>Jak wi\u0119c mamy wy\u015bwietli\u0107 drugi element dynamiczny po klikni\u0119ciu pierwszego bez opuszczania strony? Mo\u017cesz to zrobi\u0107, badaj\u0105c cel zdarzenia, kt\u00f3re zosta\u0142o wyzwolone.<\/p>\n<h3>Kodeks post\u0119powania ze zdarzeniami<\/h3>\n<p>B\u0119d\u0119 u\u017cywa\u0142 jQuery poni\u017cej, poniewa\u017c wi\u0119kszo\u015b\u0107 moich czytelnik\u00f3w pracuje z WordPressem, a WordPress jest dostarczany z jQuery, ale mo\u017cna to r\u00f3wnie\u017c obs\u0142u\u017cy\u0107 za pomoc\u0105 waniliowego JavaScriptu (ale pr\u00f3ba pod\u0105\u017cania t\u0105 drog\u0105 jest czym\u015b wi\u0119cej ni\u017c chc\u0119 wyja\u015bni\u0107 w tym konkretnym przypadku Poczta).<\/p>\n<p>Powiedziawszy to, oto sedno, kt\u00f3re wyja\u015bni\u0119, co si\u0119 dzieje <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c2d33cce48603de444d2a620927f32da#file-00-example-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">z kodem:<\/a><\/strong><\/p>\n<pre><code>$('.acme-element').each(function(e) { \n  var $anchor = $(this).parents('a');\n  $(this).on('click', function(evt) {\n    if(e.target !== this) {\n      evt.preventDefault();\n    }\n    \/\/ Here, you may want to action to redirect to an original anchor.\n  });\n});<\/code><\/pre>\n<p>Po pierwsze, zak\u0142adam, \u017ce istnieje wiele element\u00f3w dynamicznych, st\u0105d pow\u00f3d <a href=\"https:\/\/api.jquery.com\/jquery.each\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ka\u017cdego<\/a> iteratora.<\/p>\n<p>Nast\u0119pnie tworzy odniesienie do elementu <strong>zakotwiczenia<\/strong>, kt\u00f3ry jest rodzicem bie\u017c\u0105cej instancji elementu dynamicznego (u\u017cycie tutaj <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Statements\/var\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">var<\/a> jest wa\u017cne, poniewa\u017c zawsze odnosi si\u0119 do elementu, kt\u00f3ry jest rodzicem bie\u017c\u0105cej instancji iteracji w przeciwie\u0144stwie do nadpisywania poprzedniej instancji ).<\/p>\n<p>Kiedy element zostanie klikni\u0119ty, konfigurujemy procedur\u0119 obs\u0142ugi <strong>klikni\u0119cia<\/strong>, aby\u015bmy mogli spojrze\u0107 na cel zdarzenia zdarzenia click. W tym miejscu robi si\u0119 troch\u0119 zagmatwane.<\/p>\n<p>Mamy zmienne <strong>e<\/strong> i <strong>evt<\/strong>, z kt\u00f3rych ka\u017cda odnosi si\u0119 do obs\u0142ugi zdarze\u0144 dla okre\u015blonego elementu. W powy\u017cszym kodzie:<\/p>\n<ul>\n<li><strong>e<\/strong> odnosi si\u0119 do zdarzenia zwi\u0105zanego z naszym \u017cywio\u0142em dynamicznym,<\/li>\n<li><strong>evt<\/strong> odnosi si\u0119 do elementu, ale wp\u0142ywa r\u00f3wnie\u017c na proces b\u0105blowania zdarze\u0144, co oznacza, \u017ce \u200b\u200bb\u0119dzie wyzwala\u0107 zdarzenia w pozosta\u0142ej cz\u0119\u015bci DOM.<\/li>\n<\/ul>\n<p>I tak, w naszym warunku, oceniamy cel pierwszego programu obs\u0142ugi zdarzenia, aby upewni\u0107 si\u0119, \u017ce nie pasuje on do okre\u015blonego elementu. Stamt\u0105d, jak wida\u0107 w komentarzu do kodu, mo\u017cesz okre\u015bli\u0107, w jaki spos\u00f3b chcesz post\u0119powa\u0107 (np. Mo\u017ce i\u015b\u0107 do przodu i pozwoli\u0107 mu nawigowa\u0107 gdzie indziej lub zrobi\u0107 co\u015b innego).<\/p>\n<p>Ostatecznie to twoja sprawa. Ale kiedy dostaniesz si\u0119 do powi\u0105zania element\u00f3w dynamicznych, element\u00f3w statycznych i obs\u0142ugi zdarze\u0144, mo\u017ce to szybko si\u0119 skomplikowa\u0107.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kiedy dostaniesz si\u0119 do powi\u0105zania element\u00f3w dynamicznych, element\u00f3w statycznych i obs\u0142ugi zdarze\u0144, mo\u017ce to szybko si\u0119 skomplikowa\u0107.<\/p>\n","protected":false},"author":1,"featured_media":224006,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,732,897],"tags":[1169],"class_list":["post-229633","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-javascript-7","category-kod","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229633"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229633\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224006"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}