വിവിധ വെബ് ആപ്ലിക്കേഷനുകളിലുടനീളം പുനരുപയോഗിക്കാവുന്നതും എൻക്യാപ്സുലേറ്റ് ചെയ്തതുമായ യുഐ കോമ്പോണന്റുകൾ നിർമ്മിക്കുന്നതിന്, കസ്റ്റം എലമെന്റ്സിൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ച് വെബ് കോമ്പോണന്റുകളുടെ ശക്തി പര്യവേക്ഷണം ചെയ്യുക.
വെബ് കോമ്പോണന്റ്സ്: കസ്റ്റം എലമെന്റ്സിലേക്കുള്ള ഒരു ആഴത്തിലുള്ള യാത്ര
വെബ് ഡെവലപ്മെന്റിലെ ഒരു സുപ്രധാന മുന്നേറ്റമാണ് വെബ് കോമ്പോണന്റ്സ്. പുനരുപയോഗിക്കാവുന്നതും എൻക്യാപ്സുലേറ്റ് ചെയ്തതുമായ യുഐ കോമ്പോണന്റുകൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു സ്റ്റാൻഡേർഡ് മാർഗ്ഗം ഇത് നൽകുന്നു. വെബ് കോമ്പോണന്റ്സ് ഉൾക്കൊള്ളുന്ന പ്രധാന സാങ്കേതികവിദ്യകളിൽ, കസ്റ്റം സ്വഭാവവും റെൻഡറിംഗും ഉള്ള പുതിയ എച്ച്ടിഎംഎൽ ടാഗുകൾ നിർവചിക്കുന്നതിനുള്ള അടിസ്ഥാനമായി കസ്റ്റം എലമെന്റ്സ് നിലകൊള്ളുന്നു. ഈ സമഗ്രമായ ഗൈഡ് കസ്റ്റം എലമെന്റ്സുകളുടെ സങ്കീർണ്ണതകളിലേക്ക് ആഴ്ന്നിറങ്ങുന്നു, ആധുനിക വെബ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുന്നതിനുള്ള അവയുടെ പ്രയോജനങ്ങൾ, നടപ്പാക്കൽ, മികച്ച രീതികൾ എന്നിവ പര്യവേക്ഷണം ചെയ്യുന്നു.
എന്താണ് വെബ് കോമ്പോണന്റ്സ്?
ഡെവലപ്പർമാർക്ക് പുനരുപയോഗിക്കാവുന്നതും, എൻക്യാപ്സുലേറ്റ് ചെയ്തതും, പരസ്പരം പ്രവർത്തിക്കാൻ കഴിയുന്നതുമായ എച്ച്ടിഎംഎൽ എലമെന്റുകൾ നിർമ്മിക്കാൻ അനുവദിക്കുന്ന വെബ് സ്റ്റാൻഡേർഡുകളുടെ ഒരു കൂട്ടമാണ് വെബ് കോമ്പോണന്റ്സ്. വെബ് ഡെവലപ്മെന്റിന് ഇത് ഒരു മോഡുലാർ സമീപനം വാഗ്ദാനം ചെയ്യുന്നു, ഇത് വിവിധ പ്രോജക്റ്റുകളിലും ഫ്രെയിംവർക്കുകളിലും എളുപ്പത്തിൽ പങ്കിടാനും പുനരുപയോഗിക്കാനും കഴിയുന്ന കസ്റ്റം യുഐ കോമ്പോണന്റുകൾ നിർമ്മിക്കാൻ സഹായിക്കുന്നു. വെബ് കോമ്പോണന്റ്സിന് പിന്നിലെ പ്രധാന സാങ്കേതികവിദ്യകൾ ഇവയാണ്:
- കസ്റ്റം എലമെന്റ്സ്: പുതിയ എച്ച്ടിഎംഎൽ ടാഗുകളും അവയുടെ സ്വഭാവങ്ങളും നിർവചിക്കുക.
- ഷാഡോ ഡോം (Shadow DOM): ഒരു കോമ്പോണന്റിനായി ഒരു പ്രത്യേക ഡോം ട്രീ (DOM tree) സൃഷ്ടിച്ച് എൻക്യാപ്സുലേഷൻ നൽകുന്നു, ഇത് അതിന്റെ സ്റ്റൈലുകളെയും സ്ക്രിപ്റ്റുകളെയും ഗ്ലോബൽ സ്കോപ്പിൽ നിന്ന് സംരക്ഷിക്കുന്നു.
- എച്ച്ടിഎംഎൽ ടെംപ്ലേറ്റുകൾ: ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് ഇൻസ്റ്റാൾ ചെയ്യാനും കൈകാര്യം ചെയ്യാനും കഴിയുന്ന പുനരുപയോഗിക്കാവുന്ന എച്ച്ടിഎംഎൽ ഘടനകൾ നിർവചിക്കുക.
കസ്റ്റം എലമെന്റ്സിനെ മനസ്സിലാക്കാം
വെബ് കോമ്പോണന്റ്സിന്റെ ഹൃദയഭാഗമാണ് കസ്റ്റം എലമെന്റ്സ്, ഇത് ഡെവലപ്പർമാരെ അവരുടെ സ്വന്തം എലമെന്റുകൾ ഉപയോഗിച്ച് എച്ച്ടിഎംഎൽ പദാവലി വികസിപ്പിക്കാൻ പ്രാപ്തരാക്കുന്നു. ഈ കസ്റ്റം എലമെന്റുകൾ സാധാരണ എച്ച്ടിഎംഎൽ എലമെന്റുകളെപ്പോലെ പ്രവർത്തിക്കുന്നു, പക്ഷേ അവയെ നിർദ്ദിഷ്ട ആപ്ലിക്കേഷൻ ആവശ്യകതകൾക്കനുസരിച്ച് ക്രമീകരിക്കാൻ കഴിയും, ഇത് കൂടുതൽ വഴക്കവും കോഡ് ഓർഗനൈസേഷനും നൽകുന്നു.
കസ്റ്റം എലമെന്റ്സ് നിർവചിക്കുന്നു
ഒരു കസ്റ്റം എലമെന്റ് നിർവചിക്കുന്നതിന്, നിങ്ങൾ customElements.define()
എന്ന മെത്തേഡ് ഉപയോഗിക്കേണ്ടതുണ്ട്. ഈ മെത്തേഡ് രണ്ട് ആർഗ്യുമെന്റുകൾ എടുക്കുന്നു:
- എലമെന്റിന്റെ പേര്: കസ്റ്റം എലമെന്റിന്റെ പേരിനെ പ്രതിനിധീകരിക്കുന്ന ഒരു സ്ട്രിംഗ്. സ്റ്റാൻഡേർഡ് എച്ച്ടിഎംഎൽ എലമെന്റുകളുമായുള്ള വൈരുദ്ധ്യങ്ങൾ ഒഴിവാക്കാൻ പേരിൽ ഒരു ഹൈഫൻ (
-
) അടങ്ങിയിരിക്കണം. ഉദാഹരണത്തിന്,my-element
എന്നത് സാധുവായ പേരാണ്, എന്നാൽmyelement
അല്ല. - എലമെന്റ് ക്ലാസ്:
HTMLElement
-ൽ നിന്ന് വികസിപ്പിച്ചതും കസ്റ്റം എലമെന്റിന്റെ സ്വഭാവം നിർവചിക്കുന്നതുമായ ഒരു ജാവാസ്ക്രിപ്റ്റ് ക്ലാസ്.
ഇവിടെ ഒരു അടിസ്ഥാന ഉദാഹരണം നൽകുന്നു:
class MyElement extends HTMLElement {
constructor() {
super();
this.innerHTML = 'Hello, World!';
}
}
customElements.define('my-element', MyElement);
ഈ ഉദാഹരണത്തിൽ, നമ്മൾ my-element
എന്ന് പേരുള്ള ഒരു കസ്റ്റം എലമെന്റ് നിർവചിക്കുന്നു. MyElement
ക്ലാസ് HTMLElement
-ൽ നിന്ന് വികസിപ്പിക്കുകയും കൺസ്ട്രക്റ്ററിൽ എലമെന്റിന്റെ ഇന്നർ എച്ച്ടിഎംഎൽ "Hello, World!" എന്ന് സജ്ജീകരിക്കുകയും ചെയ്യുന്നു.
കസ്റ്റം എലമെന്റ് ലൈഫ് സൈക്കിൾ കോൾബാക്കുകൾ
കസ്റ്റം എലമെന്റുകൾക്ക് നിരവധി ലൈഫ് സൈക്കിൾ കോൾബാക്കുകൾ ഉണ്ട്, അത് എലമെന്റിന്റെ ജീവിതചക്രത്തിലെ വിവിധ ഘട്ടങ്ങളിൽ കോഡ് എക്സിക്യൂട്ട് ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഈ കോൾബാക്കുകൾ എലമെന്റ് സജ്ജീകരിക്കാനും ആട്രിബ്യൂട്ട് മാറ്റങ്ങളോട് പ്രതികരിക്കാനും എലമെന്റ് ഡോമിൽ (DOM) നിന്ന് നീക്കംചെയ്യുമ്പോൾ റിസോഴ്സുകൾ വൃത്തിയാക്കാനും അവസരങ്ങൾ നൽകുന്നു.
connectedCallback()
: എലമെന്റ് ഡോമിലേക്ക് (DOM) ചേർക്കുമ്പോൾ വിളിക്കപ്പെടുന്നു. ഡാറ്റ ലഭ്യമാക്കുക അല്ലെങ്കിൽ ഇവന്റ് ലിസണറുകൾ ചേർക്കുക പോലുള്ള സജ്ജീകരണ പ്രവർത്തനങ്ങൾ നടത്താൻ ഇത് ഒരു നല്ല സ്ഥലമാണ്.disconnectedCallback()
: എലമെന്റ് ഡോമിൽ (DOM) നിന്ന് നീക്കം ചെയ്യുമ്പോൾ വിളിക്കപ്പെടുന്നു. ഇവന്റ് ലിസണറുകൾ നീക്കം ചെയ്യുക അല്ലെങ്കിൽ മെമ്മറി റിലീസ് ചെയ്യുക പോലുള്ള റിസോഴ്സുകൾ വൃത്തിയാക്കാൻ ഇത് ഒരു നല്ല സ്ഥലമാണ്.attributeChangedCallback(name, oldValue, newValue)
: എലമെന്റിന്റെ ഒരു ആട്രിബ്യൂട്ട് മാറ്റുമ്പോൾ വിളിക്കപ്പെടുന്നു. ആട്രിബ്യൂട്ട് മാറ്റങ്ങളോട് പ്രതികരിക്കാനും അതിനനുസരിച്ച് എലമെന്റിന്റെ റെൻഡറിംഗ് അപ്ഡേറ്റ് ചെയ്യാനും ഈ കോൾബാക്ക് നിങ്ങളെ അനുവദിക്കുന്നു.observedAttributes
ഗെറ്റർ ഉപയോഗിച്ച് ഏതൊക്കെ ആട്രിബ്യൂട്ടുകളാണ് നിരീക്ഷിക്കേണ്ടതെന്ന് നിങ്ങൾ വ്യക്തമാക്കേണ്ടതുണ്ട്.adoptedCallback()
: എലമെന്റ് ഒരു പുതിയ ഡോക്യുമെന്റിലേക്ക് മാറ്റുമ്പോൾ വിളിക്കപ്പെടുന്നു.
ലൈഫ് സൈക്കിൾ കോൾബാക്കുകളുടെ ഉപയോഗം കാണിക്കുന്ന ഒരു ഉദാഹരണം ഇതാ:
class MyElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({mode: 'open'});
}
connectedCallback() {
this.shadow.innerHTML = `<p>Connected to the DOM!</p>`;
console.log('Element connected');
}
disconnectedCallback() {
console.log('Element disconnected');
}
static get observedAttributes() { return ['data-message']; }
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'data-message') {
this.shadow.innerHTML = `<p>${newValue}</p>`;
}
}
}
customElements.define('my-element', MyElement);
ഈ ഉദാഹരണത്തിൽ, connectedCallback()
കൺസോളിലേക്ക് ഒരു സന്ദേശം ലോഗ് ചെയ്യുകയും എലമെന്റ് ഡോമിലേക്ക് കണക്റ്റുചെയ്യുമ്പോൾ അതിന്റെ ഇന്നർ എച്ച്ടിഎംഎൽ സജ്ജമാക്കുകയും ചെയ്യുന്നു. എലമെന്റ് വിച്ഛേദിക്കുമ്പോൾ disconnectedCallback()
ഒരു സന്ദേശം ലോഗ് ചെയ്യുന്നു. data-message
ആട്രിബ്യൂട്ട് മാറുമ്പോൾ attributeChangedCallback()
വിളിക്കപ്പെടുകയും എലമെന്റിന്റെ ഉള്ളടക്കം അതിനനുസരിച്ച് അപ്ഡേറ്റ് ചെയ്യുകയും ചെയ്യുന്നു. data-message
ആട്രിബ്യൂട്ടിലെ മാറ്റങ്ങൾ നിരീക്ഷിക്കാൻ നമ്മൾ ആഗ്രഹിക്കുന്നുവെന്ന് observedAttributes
ഗെറ്റർ വ്യക്തമാക്കുന്നു.
എൻക്യാപ്സുലേഷനായി ഷാഡോ ഡോം ഉപയോഗിക്കുന്നു
ഷാഡോ ഡോം വെബ് കോമ്പോണന്റുകൾക്ക് എൻക്യാപ്സുലേഷൻ നൽകുന്നു, ഇത് പേജിന്റെ മറ്റ് ഭാഗങ്ങളിൽ നിന്ന് ഒറ്റപ്പെട്ട ഒരു കോമ്പോണന്റിനായി ഒരു പ്രത്യേക ഡോം ട്രീ (DOM tree) സൃഷ്ടിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഇതിനർത്ഥം ഷാഡോ ഡോമിനുള്ളിൽ നിർവചിച്ചിരിക്കുന്ന സ്റ്റൈലുകളും സ്ക്രിപ്റ്റുകളും പേജിന്റെ മറ്റ് ഭാഗങ്ങളെ ബാധിക്കില്ല, തിരിച്ചും. ഈ എൻക്യാപ്സുലേഷൻ വൈരുദ്ധ്യങ്ങൾ തടയാൻ സഹായിക്കുകയും നിങ്ങളുടെ കോമ്പോണന്റുകൾ പ്രവചനാതീതമായി പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നു.
ഷാഡോ ഡോം ഉപയോഗിക്കുന്നതിന്, നിങ്ങൾക്ക് എലമെന്റിൽ attachShadow()
മെത്തേഡ് വിളിക്കാം. ഈ മെത്തേഡ് ഷാഡോ ഡോമിന്റെ മോഡ് വ്യക്തമാക്കുന്ന ഒരു ഓപ്ഷൻസ് ഒബ്ജക്റ്റ് എടുക്കുന്നു. mode
ഒന്നുകിൽ 'open'
അല്ലെങ്കിൽ 'closed'
ആകാം. മോഡ് 'open'
ആണെങ്കിൽ, എലമെന്റിന്റെ shadowRoot
പ്രോപ്പർട്ടി ഉപയോഗിച്ച് ജാവാസ്ക്രിപ്റ്റിൽ നിന്ന് ഷാഡോ ഡോം ആക്സസ് ചെയ്യാൻ കഴിയും. മോഡ് 'closed'
ആണെങ്കിൽ, ജാവാസ്ക്രിപ്റ്റിൽ നിന്ന് ഷാഡോ ഡോം ആക്സസ് ചെയ്യാൻ കഴിയില്ല.
ഷാഡോ ഡോം ഉപയോഗം കാണിക്കുന്ന ഒരു ഉദാഹരണം ഇതാ:
class MyElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this.shadow.innerHTML = `
<style>
p {
color: blue;
}
</style>
<p>This is inside the Shadow DOM.</p>
`;
}
}
customElements.define('my-element', MyElement);
ഈ ഉദാഹരണത്തിൽ, നമ്മൾ mode: 'open'
ഉപയോഗിച്ച് എലമെന്റിലേക്ക് ഒരു ഷാഡോ ഡോം അറ്റാച്ചുചെയ്യുന്നു. തുടർന്ന്, ഖണ്ഡികകളുടെ നിറം നീലയായി സജ്ജീകരിക്കുന്ന ഒരു സ്റ്റൈലും കുറച്ച് ടെക്സ്റ്റുള്ള ഒരു ഖണ്ഡിക എലമെന്റും ഉൾപ്പെടുത്തുന്നതിനായി ഷാഡോ ഡോമിന്റെ ഇന്നർ എച്ച്ടിഎംഎൽ സജ്ജമാക്കുന്നു. ഷാഡോ ഡോമിനുള്ളിൽ നിർവചിച്ചിരിക്കുന്ന സ്റ്റൈൽ ഷാഡോ ഡോമിനുള്ളിലെ എലമെന്റുകൾക്ക് മാത്രമേ ബാധകമാകൂ, ഷാഡോ ഡോമിന് പുറത്തുള്ള ഖണ്ഡികകളെ ബാധിക്കില്ല.
കസ്റ്റം എലമെന്റ്സ് ഉപയോഗിക്കുന്നതിന്റെ പ്രയോജനങ്ങൾ
വെബ് ഡെവലപ്മെന്റിന് കസ്റ്റം എലമെന്റ്സ് നിരവധി പ്രയോജനങ്ങൾ വാഗ്ദാനം ചെയ്യുന്നു:
- പുനരുപയോഗം: കസ്റ്റം എലമെന്റുകൾ വിവിധ പ്രോജക്റ്റുകളിലും ഫ്രെയിംവർക്കുകളിലും പുനരുപയോഗിക്കാൻ കഴിയും, ഇത് കോഡ് ഡ്യൂപ്ലിക്കേഷൻ കുറയ്ക്കുകയും പരിപാലനം മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നു.
- എൻക്യാപ്സുലേഷൻ: ഷാഡോ ഡോം എൻക്യാപ്സുലേഷൻ നൽകുന്നു, ഇത് സ്റ്റൈൽ, സ്ക്രിപ്റ്റ് വൈരുദ്ധ്യങ്ങൾ തടയുകയും കോമ്പോണന്റുകൾ പ്രവചനാതീതമായി പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നു.
- പരസ്പരപ്രവർത്തനക്ഷമത: കസ്റ്റം എലമെന്റുകൾ വെബ് സ്റ്റാൻഡേർഡുകളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്, ഇത് മറ്റ് വെബ് സാങ്കേതികവിദ്യകളുമായും ഫ്രെയിംവർക്കുകളുമായും പരസ്പരം പ്രവർത്തിക്കാൻ കഴിയുന്നതാക്കുന്നു.
- പരിപാലനം: വെബ് കോമ്പോണന്റ്സിന്റെ മോഡുലാർ സ്വഭാവം കോഡ് പരിപാലിക്കുന്നതും അപ്ഡേറ്റ് ചെയ്യുന്നതും എളുപ്പമാക്കുന്നു. ഒരു കോമ്പോണന്റിലെ മാറ്റങ്ങൾ ഒറ്റപ്പെട്ടതാണ്, ഇത് ആപ്ലിക്കേഷന്റെ മറ്റ് ഭാഗങ്ങളെ തകർക്കാനുള്ള സാധ്യത കുറയ്ക്കുന്നു.
- പ്രകടനം: പാഴ്സ് ചെയ്യുകയും എക്സിക്യൂട്ട് ചെയ്യുകയും ചെയ്യേണ്ട കോഡിന്റെ അളവ് കുറച്ചുകൊണ്ട് കസ്റ്റം എലമെന്റുകൾക്ക് പ്രകടനം മെച്ചപ്പെടുത്താൻ കഴിയും. കൂടുതൽ കാര്യക്ഷമമായ റെൻഡറിംഗിനും അപ്ഡേറ്റുകൾക്കും അവ അനുവദിക്കുന്നു.
കസ്റ്റം എലമെന്റ്സിന്റെ പ്രായോഗിക ഉദാഹരണങ്ങൾ
സാധാരണ യുഐ കോമ്പോണന്റുകൾ നിർമ്മിക്കാൻ കസ്റ്റം എലമെന്റുകൾ എങ്ങനെ ഉപയോഗിക്കാമെന്നതിന്റെ ചില പ്രായോഗിക ഉദാഹരണങ്ങൾ നമുക്ക് പര്യവേക്ഷണം ചെയ്യാം.
ഒരു ലളിതമായ കൗണ്ടർ കോമ്പോണന്റ്
കസ്റ്റം എലമെന്റുകൾ ഉപയോഗിച്ച് ഒരു ലളിതമായ കൗണ്ടർ കോമ്പോണന്റ് എങ്ങനെ സൃഷ്ടിക്കാമെന്ന് ഈ ഉദാഹരണം കാണിക്കുന്നു.
class Counter extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this._count = 0;
this.render();
}
connectedCallback() {
this.shadow.querySelector('.increment').addEventListener('click', () => {
this.increment();
});
this.shadow.querySelector('.decrement').addEventListener('click', () => {
this.decrement();
});
}
increment() {
this._count++;
this.render();
}
decrement() {
this._count--;
this.render();
}
render() {
this.shadow.innerHTML = `
<style>
.counter {
display: flex;
align-items: center;
}
button {
padding: 5px 10px;
margin: 0 5px;
}
</style>
<div class="counter">
<button class="decrement">-</button>
<span>${this._count}</span>
<button class="increment">+</button>
</div>
`;
}
}
customElements.define('my-counter', Counter);
ഈ കോഡ് HTMLElement
വികസിപ്പിക്കുന്ന ഒരു Counter
ക്ലാസ് നിർവചിക്കുന്നു. കൺസ്ട്രക്റ്റർ കോമ്പോണന്റ് ആരംഭിക്കുകയും ഒരു ഷാഡോ ഡോം അറ്റാച്ചുചെയ്യുകയും പ്രാരംഭ കൗണ്ട് 0 ആയി സജ്ജമാക്കുകയും ചെയ്യുന്നു. connectedCallback()
മെത്തേഡ് ഇൻക്രിമെന്റ്, ഡിക്രിമെന്റ് ബട്ടണുകളിലേക്ക് ഇവന്റ് ലിസണറുകൾ ചേർക്കുന്നു. increment()
, decrement()
മെത്തേഡുകൾ കൗണ്ട് അപ്ഡേറ്റ് ചെയ്യുകയും കോമ്പോണന്റിന്റെ റെൻഡറിംഗ് അപ്ഡേറ്റ് ചെയ്യുന്നതിനായി render()
മെത്തേഡ് വിളിക്കുകയും ചെയ്യുന്നു. render()
മെത്തേഡ് കൗണ്ടർ ഡിസ്പ്ലേയും ബട്ടണുകളും ഉൾപ്പെടുത്തുന്നതിനായി ഷാഡോ ഡോമിന്റെ ഇന്നർ എച്ച്ടിഎംഎൽ സജ്ജമാക്കുന്നു.
ഒരു ഇമേജ് കറൗസൽ കോമ്പോണന്റ്
കസ്റ്റം എലമെന്റുകൾ ഉപയോഗിച്ച് ഒരു ഇമേജ് കറൗസൽ കോമ്പോണന്റ് എങ്ങനെ നിർമ്മിക്കാമെന്ന് ഈ ഉദാഹരണം കാണിക്കുന്നു. ചുരുക്കത്തിൽ, ഇമേജ് സോഴ്സുകൾ പ്ലെയ്സ്ഹോൾഡറുകളാണ്, അവ ഒരു API, CMS, അല്ലെങ്കിൽ ലോക്കൽ സ്റ്റോറേജിൽ നിന്ന് ഡൈനാമിക് ആയി ലോഡ് ചെയ്യാവുന്നതാണ്. സ്റ്റൈലിംഗും കുറച്ചിട്ടുണ്ട്.
class ImageCarousel extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this._images = [
'https://via.placeholder.com/350x150',
'https://via.placeholder.com/350x150/0077bb',
'https://via.placeholder.com/350x150/00bb77',
];
this._currentIndex = 0;
this.render();
}
connectedCallback() {
this.shadow.querySelector('.prev').addEventListener('click', () => {
this.prevImage();
});
this.shadow.querySelector('.next').addEventListener('click', () => {
this.nextImage();
});
}
nextImage() {
this._currentIndex = (this._currentIndex + 1) % this._images.length;
this.render();
}
prevImage() {
this._currentIndex = (this._currentIndex - 1 + this._images.length) % this._images.length;
this.render();
}
render() {
this.shadow.innerHTML = `
<style>
.carousel {
display: flex;
flex-direction: column;
align-items: center;
}
img {
max-width: 350px;
max-height: 150px;
}
.controls {
margin-top: 10px;
}
button {
padding: 5px 10px;
}
</style>
<div class="carousel">
<img src="${this._images[this._currentIndex]}" alt="Carousel Image">
<div class="controls">
<button class="prev">Previous</button>
<button class="next">Next</button>
</div>
</div>
`;
}
}
customElements.define('image-carousel', ImageCarousel);
ഈ കോഡ് HTMLElement
വികസിപ്പിക്കുന്ന ഒരു ImageCarousel
ക്ലാസ് നിർവചിക്കുന്നു. കൺസ്ട്രക്റ്റർ കോമ്പോണന്റ് ആരംഭിക്കുകയും ഒരു ഷാഡോ ഡോം അറ്റാച്ചുചെയ്യുകയും പ്രാരംഭ ഇമേജ് അറേയും നിലവിലെ ഇൻഡെക്സും സജ്ജമാക്കുകയും ചെയ്യുന്നു. connectedCallback()
മെത്തേഡ് മുമ്പത്തേതും അടുത്തതുമായ ബട്ടണുകളിലേക്ക് ഇവന്റ് ലിസണറുകൾ ചേർക്കുന്നു. nextImage()
, prevImage()
മെത്തേഡുകൾ നിലവിലെ ഇൻഡെക്സ് അപ്ഡേറ്റ് ചെയ്യുകയും കോമ്പോണന്റിന്റെ റെൻഡറിംഗ് അപ്ഡേറ്റ് ചെയ്യുന്നതിനായി render()
മെത്തേഡ് വിളിക്കുകയും ചെയ്യുന്നു. render()
മെത്തേഡ് നിലവിലെ ചിത്രവും ബട്ടണുകളും ഉൾപ്പെടുത്തുന്നതിനായി ഷാഡോ ഡോമിന്റെ ഇന്നർ എച്ച്ടിഎംഎൽ സജ്ജമാക്കുന്നു.
കസ്റ്റം എലമെന്റുകളുമായി പ്രവർത്തിക്കുന്നതിനുള്ള മികച്ച രീതികൾ
കസ്റ്റം എലമെന്റുകളുമായി പ്രവർത്തിക്കുമ്പോൾ പിന്തുടരേണ്ട ചില മികച്ച രീതികൾ ഇതാ:
- വിവരണാത്മകമായ എലമെന്റ് പേരുകൾ ഉപയോഗിക്കുക: കോമ്പോണന്റിന്റെ ഉദ്ദേശ്യം വ്യക്തമായി സൂചിപ്പിക്കുന്ന എലമെന്റ് പേരുകൾ തിരഞ്ഞെടുക്കുക.
- എൻക്യാപ്സുലേഷനായി ഷാഡോ ഡോം ഉപയോഗിക്കുക: ഷാഡോ ഡോം സ്റ്റൈൽ, സ്ക്രിപ്റ്റ് വൈരുദ്ധ്യങ്ങൾ തടയാൻ സഹായിക്കുകയും കോമ്പോണന്റുകൾ പ്രവചനാതീതമായി പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നു.
- ലൈഫ് സൈക്കിൾ കോൾബാക്കുകൾ ഉചിതമായി ഉപയോഗിക്കുക: എലമെന്റ് ആരംഭിക്കുന്നതിനും ആട്രിബ്യൂട്ട് മാറ്റങ്ങളോട് പ്രതികരിക്കുന്നതിനും എലമെന്റ് ഡോമിൽ നിന്ന് നീക്കം ചെയ്യുമ്പോൾ റിസോഴ്സുകൾ വൃത്തിയാക്കുന്നതിനും ലൈഫ് സൈക്കിൾ കോൾബാക്കുകൾ ഉപയോഗിക്കുക.
- കോൺഫിഗറേഷനായി ആട്രിബ്യൂട്ടുകൾ ഉപയോഗിക്കുക: കോമ്പോണന്റിന്റെ സ്വഭാവവും രൂപവും ക്രമീകരിക്കുന്നതിന് ആട്രിബ്യൂട്ടുകൾ ഉപയോഗിക്കുക.
- ആശയവിനിമയത്തിനായി ഇവന്റുകൾ ഉപയോഗിക്കുക: കോമ്പോണന്റുകൾക്കിടയിൽ ആശയവിനിമയം നടത്താൻ കസ്റ്റം ഇവന്റുകൾ ഉപയോഗിക്കുക.
- ഒരു ഫാൾബാക്ക് അനുഭവം നൽകുക: വെബ് കോമ്പോണന്റുകളെ പിന്തുണയ്ക്കാത്ത ബ്രൗസറുകൾക്ക് ഒരു ഫാൾബാക്ക് അനുഭവം നൽകുന്നത് പരിഗണിക്കുക. പുരോഗമനപരമായ മെച്ചപ്പെടുത്തൽ ഉപയോഗിച്ച് ഇത് ചെയ്യാൻ കഴിയും.
- അന്താരാഷ്ട്രവൽക്കരണം (i18n), പ്രാദേശികവൽക്കരണം (l10n) എന്നിവയെക്കുറിച്ച് ചിന്തിക്കുക: വെബ് കോമ്പോണന്റുകൾ വികസിപ്പിക്കുമ്പോൾ, അവ എങ്ങനെ വിവിധ ഭാഷകളിലും പ്രദേശങ്ങളിലും ഉപയോഗിക്കുമെന്ന് പരിഗണിക്കുക. നിങ്ങളുടെ കോമ്പോണന്റുകൾ എളുപ്പത്തിൽ വിവർത്തനം ചെയ്യാനും പ്രാദേശികവൽക്കരിക്കാനും കഴിയുന്ന തരത്തിൽ രൂപകൽപ്പന ചെയ്യുക. ഉദാഹരണത്തിന്, എല്ലാ ടെക്സ്റ്റ് സ്ട്രിംഗുകളും പുറത്തെടുക്കുകയും വിവർത്തനങ്ങൾ ഡൈനാമിക് ആയി ലോഡ് ചെയ്യുന്നതിനുള്ള സംവിധാനങ്ങൾ നൽകുകയും ചെയ്യുക. നിങ്ങളുടെ തീയതി, സമയ ഫോർമാറ്റുകൾ, കറൻസി ചിഹ്നങ്ങൾ, മറ്റ് പ്രാദേശിക ക്രമീകരണങ്ങൾ എന്നിവ ശരിയായി കൈകാര്യം ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കുക.
- പ്രവേശനക്ഷമത (a11y) പരിഗണിക്കുക: വെബ് കോമ്പോണന്റുകൾ തുടക്കം മുതൽ തന്നെ പ്രവേശനക്ഷമത മനസ്സിൽ വെച്ച് രൂപകൽപ്പന ചെയ്യണം. സഹായക സാങ്കേതികവിദ്യകൾക്ക് സെമാന്റിക് വിവരങ്ങൾ നൽകുന്നതിന് ആവശ്യമുള്ളിടത്ത് ARIA ആട്രിബ്യൂട്ടുകൾ ഉപയോഗിക്കുക. കീബോർഡ് നാവിഗേഷൻ പൂർണ്ണമായി പിന്തുണയ്ക്കുന്നുവെന്നും കാഴ്ച വൈകല്യമുള്ള ഉപയോക്താക്കൾക്ക് വർണ്ണ കോൺട്രാസ്റ്റ് പര്യാപ്തമാണെന്നും ഉറപ്പാക്കുക. നിങ്ങളുടെ കോമ്പോണന്റുകളുടെ പ്രവേശനക്ഷമത പരിശോധിക്കുന്നതിന് സ്ക്രീൻ റീഡറുകൾ ഉപയോഗിച്ച് അവ പരീക്ഷിക്കുക.
കസ്റ്റം എലമെന്റ്സും ഫ്രെയിംവർക്കുകളും
കസ്റ്റം എലമെന്റുകൾ മറ്റ് വെബ് സാങ്കേതികവിദ്യകളുമായും ഫ്രെയിംവർക്കുകളുമായും പരസ്പരം പ്രവർത്തിക്കാൻ കഴിയുന്ന തരത്തിലാണ് രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്. റിയാക്റ്റ് (React), ആംഗുലർ (Angular), വ്യൂ.ജെഎസ് (Vue.js) പോലുള്ള ജനപ്രിയ ഫ്രെയിംവർക്കുകളുമായി ചേർന്ന് അവ ഉപയോഗിക്കാൻ കഴിയും.
റിയാക്റ്റിൽ കസ്റ്റം എലമെന്റുകൾ ഉപയോഗിക്കുന്നു
റിയാക്റ്റിൽ കസ്റ്റം എലമെന്റുകൾ ഉപയോഗിക്കുന്നതിന്, നിങ്ങൾക്ക് മറ്റേതൊരു എച്ച്ടിഎംഎൽ എലമെന്റിനെയും പോലെ അവയെ റെൻഡർ ചെയ്യാൻ കഴിയും. എന്നിരുന്നാലും, അടിസ്ഥാന ഡോം എലമെന്റ് ആക്സസ് ചെയ്യാനും അതുമായി നേരിട്ട് സംവദിക്കാനും നിങ്ങൾ ഒരു റെഫ് (ref) ഉപയോഗിക്കേണ്ടി വന്നേക്കാം.
import React, { useRef, useEffect } from 'react';
function MyComponent() {
const myElementRef = useRef(null);
useEffect(() => {
if (myElementRef.current) {
// Access the custom element's API
myElementRef.current.addEventListener('custom-event', (event) => {
console.log('Custom event received:', event.detail);
});
}
}, []);
return <my-element ref={myElementRef}></my-element>;
}
export default MyComponent;
ഈ ഉദാഹരണത്തിൽ, നമ്മൾ my-element
കസ്റ്റം എലമെന്റ് ആക്സസ് ചെയ്യാനും അതിലേക്ക് ഒരു ഇവന്റ് ലിസണർ ചേർക്കാനും ഒരു റെഫ് ഉപയോഗിക്കുന്നു. ഇത് കസ്റ്റം എലമെന്റ് അയക്കുന്ന കസ്റ്റം ഇവന്റുകൾ കേൾക്കാനും അതിനനുസരിച്ച് പ്രതികരിക്കാനും നമ്മളെ അനുവദിക്കുന്നു.
ആംഗുലറിൽ കസ്റ്റം എലമെന്റുകൾ ഉപയോഗിക്കുന്നു
ആംഗുലറിൽ കസ്റ്റം എലമെന്റുകൾ ഉപയോഗിക്കുന്നതിന്, കസ്റ്റം എലമെന്റ് തിരിച്ചറിയാൻ നിങ്ങൾ ആംഗുലർ കോൺഫിഗർ ചെയ്യേണ്ടതുണ്ട്. മൊഡ്യൂളിന്റെ കോൺഫിഗറേഷനിലെ schemas
അറേയിലേക്ക് കസ്റ്റം എലമെന്റ് ചേർത്തുകൊണ്ട് ഇത് ചെയ്യാൻ കഴിയും.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule { }
കസ്റ്റം എലമെന്റ് രജിസ്റ്റർ ചെയ്തുകഴിഞ്ഞാൽ, നിങ്ങളുടെ ആംഗുലർ ടെംപ്ലേറ്റുകളിൽ മറ്റേതൊരു എച്ച്ടിഎംഎൽ എലമെന്റിനെയും പോലെ നിങ്ങൾക്ക് അത് ഉപയോഗിക്കാൻ കഴിയും.
വ്യൂ.ജെഎസിൽ കസ്റ്റം എലമെന്റുകൾ ഉപയോഗിക്കുന്നു
വ്യൂ.ജെഎസും കസ്റ്റം എലമെന്റുകളെ സ്വാഭാവികമായി പിന്തുണയ്ക്കുന്നു. പ്രത്യേക കോൺഫിഗറേഷൻ ഇല്ലാതെ തന്നെ നിങ്ങളുടെ ടെംപ്ലേറ്റുകളിൽ അവ നേരിട്ട് ഉപയോഗിക്കാൻ കഴിയും.
<template>
<my-element></my-element>
</template>
<script>
export default {
name: 'MyComponent'
}
</script>
വ്യൂ യാന്ത്രികമായി കസ്റ്റം എലമെന്റ് തിരിച്ചറിയുകയും അത് ശരിയായി റെൻഡർ ചെയ്യുകയും ചെയ്യും.
പ്രവേശനക്ഷമതാ പരിഗണനകൾ
കസ്റ്റം എലമെന്റുകൾ നിർമ്മിക്കുമ്പോൾ, വികലാംഗർ ഉൾപ്പെടെ എല്ലാവർക്കും നിങ്ങളുടെ കോമ്പോണന്റുകൾ ഉപയോഗിക്കാൻ കഴിയുമെന്ന് ഉറപ്പാക്കാൻ പ്രവേശനക്ഷമത പരിഗണിക്കേണ്ടത് അത്യാവശ്യമാണ്. ചില പ്രധാന പ്രവേശനക്ഷമതാ പരിഗണനകൾ ഇതാ:
- സെമാന്റിക് എച്ച്ടിഎംഎൽ: നിങ്ങളുടെ കോമ്പോണന്റുകൾക്ക് അർത്ഥവത്തായ ഘടന നൽകാൻ സാധ്യമാകുമ്പോഴെല്ലാം സെമാന്റിക് എച്ച്ടിഎംഎൽ എലമെന്റുകൾ ഉപയോഗിക്കുക.
- ARIA ആട്രിബ്യൂട്ടുകൾ: സ്ക്രീൻ റീഡറുകൾ പോലുള്ള സഹായക സാങ്കേതികവിദ്യകൾക്ക് അധിക സെമാന്റിക് വിവരങ്ങൾ നൽകുന്നതിന് ARIA ആട്രിബ്യൂട്ടുകൾ ഉപയോഗിക്കുക.
- കീബോർഡ് നാവിഗേഷൻ: നിങ്ങളുടെ കോമ്പോണന്റുകൾ കീബോർഡ് ഉപയോഗിച്ച് നാവിഗേറ്റ് ചെയ്യാൻ കഴിയുമെന്ന് ഉറപ്പാക്കുക. ബട്ടണുകളും ലിങ്കുകളും പോലുള്ള ഇന്ററാക്ടീവ് എലമെന്റുകൾക്ക് ഇത് വളരെ പ്രധാനമാണ്.
- വർണ്ണ കോൺട്രാസ്റ്റ്: കാഴ്ച വൈകല്യമുള്ള ആളുകൾക്ക് ടെക്സ്റ്റ് വായിക്കാൻ കഴിയുന്ന തരത്തിൽ ടെക്സ്റ്റും പശ്ചാത്തല നിറങ്ങളും തമ്മിൽ മതിയായ വർണ്ണ കോൺട്രാസ്റ്റ് ഉണ്ടെന്ന് ഉറപ്പാക്കുക.
- ഫോക്കസ് മാനേജ്മെന്റ്: ഉപയോക്താക്കൾക്ക് നിങ്ങളുടെ കോമ്പോണന്റുകളിലൂടെ എളുപ്പത്തിൽ നാവിഗേറ്റ് ചെയ്യാൻ കഴിയുമെന്ന് ഉറപ്പാക്കാൻ ഫോക്കസ് ശരിയായി കൈകാര്യം ചെയ്യുക.
- സഹായക സാങ്കേതികവിദ്യകൾ ഉപയോഗിച്ച് പരീക്ഷിക്കൽ: നിങ്ങളുടെ കോമ്പോണന്റുകൾ പ്രവേശനക്ഷമമാണെന്ന് ഉറപ്പാക്കാൻ സ്ക്രീൻ റീഡറുകൾ പോലുള്ള സഹായക സാങ്കേതികവിദ്യകൾ ഉപയോഗിച്ച് അവ പരീക്ഷിക്കുക.
അന്താരാഷ്ട്രവൽക്കരണവും പ്രാദേശികവൽക്കരണവും
ഒരു ആഗോള പ്രേക്ഷകർക്കായി കസ്റ്റം എലമെന്റുകൾ വികസിപ്പിക്കുമ്പോൾ, അന്താരാഷ്ട്രവൽക്കരണം (i18n), പ്രാദേശികവൽക്കരണം (l10n) എന്നിവ പരിഗണിക്കേണ്ടത് പ്രധാനമാണ്. ചില പ്രധാന പരിഗണനകൾ ഇതാ:
- ടെക്സ്റ്റ് ദിശ: ഇടത്തുനിന്ന് വലത്തോട്ടും (LTR) വലത്തുനിന്ന് ഇടത്തോട്ടും (RTL) ടെക്സ്റ്റ് ദിശകളെ പിന്തുണയ്ക്കുക.
- തീയതി, സമയ ഫോർമാറ്റുകൾ: വിവിധ പ്രദേശങ്ങൾക്കായി ഉചിതമായ തീയതി, സമയ ഫോർമാറ്റുകൾ ഉപയോഗിക്കുക.
- കറൻസി ചിഹ്നങ്ങൾ: വിവിധ പ്രദേശങ്ങൾക്കായി ഉചിതമായ കറൻസി ചിഹ്നങ്ങൾ ഉപയോഗിക്കുക.
- വിവർത്തനം: നിങ്ങളുടെ കോമ്പോണന്റുകളിലെ എല്ലാ ടെക്സ്റ്റ് സ്ട്രിംഗുകൾക്കും വിവർത്തനങ്ങൾ നൽകുക.
- നമ്പർ ഫോർമാറ്റിംഗ്: വിവിധ പ്രദേശങ്ങൾക്കായി ഉചിതമായ നമ്പർ ഫോർമാറ്റിംഗ് ഉപയോഗിക്കുക.
ഉപസംഹാരം
പുനരുപയോഗിക്കാവുന്നതും എൻക്യാപ്സുലേറ്റ് ചെയ്തതുമായ യുഐ കോമ്പോണന്റുകൾ നിർമ്മിക്കുന്നതിനുള്ള ശക്തമായ ഒരു ഉപകരണമാണ് കസ്റ്റം എലമെന്റ്സ്. പുനരുപയോഗം, എൻക്യാപ്സുലേഷൻ, പരസ്പരപ്രവർത്തനക്ഷമത, പരിപാലനം, പ്രകടനം എന്നിവയുൾപ്പെടെ വെബ് ഡെവലപ്മെന്റിന് അവ നിരവധി പ്രയോജനങ്ങൾ വാഗ്ദാനം ചെയ്യുന്നു. ഈ ഗൈഡിൽ പറഞ്ഞിരിക്കുന്ന മികച്ച രീതികൾ പിന്തുടരുന്നതിലൂടെ, കരുത്തുറ്റതും പരിപാലിക്കാൻ എളുപ്പമുള്ളതും ആഗോള പ്രേക്ഷകർക്ക് പ്രവേശനക്ഷമവുമായ ആധുനിക വെബ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ നിങ്ങൾക്ക് കസ്റ്റം എലമെന്റ്സ് പ്രയോജനപ്പെടുത്താം. വെബ് സ്റ്റാൻഡേർഡുകൾ വികസിക്കുന്നത് തുടരുമ്പോൾ, കസ്റ്റം എലമെന്റുകൾ ഉൾപ്പെടെയുള്ള വെബ് കോമ്പോണന്റുകൾ, മോഡുലാർ, സ്കേലബിൾ വെബ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുന്നതിൽ കൂടുതൽ പ്രാധാന്യമർഹിക്കും.
വെബിന്റെ ഭാവി കെട്ടിപ്പടുക്കുന്നതിന്, ഓരോ കോമ്പോണന്റായി, കസ്റ്റം എലമെന്റ്സിന്റെ ശക്തി സ്വീകരിക്കുക. നിങ്ങളുടെ കോമ്പോണന്റുകൾ എല്ലായിടത്തുമുള്ള എല്ലാവർക്കും ഉപയോഗിക്കാൻ കഴിയുമെന്ന് ഉറപ്പാക്കാൻ പ്രവേശനക്ഷമത, അന്താരാഷ്ട്രവൽക്കരണം, പ്രാദേശികവൽക്കരണം എന്നിവ പരിഗണിക്കാൻ ഓർമ്മിക്കുക.