рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╡реЗрдм рд╕рдВрдЧреНрд░рд╣рдг API рдпрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗредрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?- рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рд╕рдордп рдпрд╛рдж рд░рдЦрдирд╛ рд╕реАрдЦреЗрдВред
- рд╣рдо рдкреГрд╖реНрда рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
- рдЖрдЗрдП рдХрд╛рд░реНрдп рд╕реВрдЪреА рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
- рд╣рдо рдЪреИрдЯ рдкрд░ рдЕрдорд▓ рдХрд░рддреЗ рд╣реИрдВред
- рдорд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрд░реА рд╕реНрдХреЗрдЪред
рддреЛ рдЪрд▓рддреЗ рд╣реИрдВредрд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдореАрдХреНрд╖рд╛
рд╕рдВрдЧреНрд░рд╣рдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, рдХреБрдХреАрдЬрд╝ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рд▓рд╛рдн рд╕реНрдЯреЛрд░реЗрдЬ рд╕рд╛рдЗрдЬ рд╣реИ (5 рдПрдордмреА рд╕реЗ, рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рд╕реАрдорд╛ рдкрд╛рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ "QUOTA_EXCEEDED_ERR" рдлреЗрдВрдХ рджреА рдЬрд╛рддреА рд╣реИ) рдФрд░ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ: рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд▓рд╛рдЧрдд рд╣реЛрддреА рд╣реИ, рдФрд░ рд▓рд┐рдЦрдирд╛ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рд╣реИредрдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдЬ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕рдорд╛рдзрд╛рди рд╣реИрдВ - рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕рдбреАрдбреАрдмреА, рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрдХрд░реНрд╕ + рдХреИрд╢ рдПрдкреАрдЖрдИ рдЖрджрд┐ рд╣реИредрдЖрдк рдпрд╣рд╛рдВ рд╕реЗрд╡рд╛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ редрд╡реЗрдм рд╕реНрдЯреЛрд░реЗрдЬ рдПрдкреАрдЖрдИ рдореЗрдВ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рд╕реЗрд╢рдирд╕реНрдЯреЛрд░реЗрдЬ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХрд╛ рд╕рдордп рд╣реИред рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рддрдм рддрдХ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ "рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ" рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рди рддреЛ рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рди рд╣реА рдЗрд╕реЗ рдбреЗрдЯрд╛ рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛)ред рд╕реЗрд╢рдирд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рд╕рдордп, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рдЪреВрдВрдХрд┐ рд╕реЗрд╢рдирд╕реНрдЯреЛрд░реАрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд▓рдЧрднрдЧ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗредрдЖрдкрдХреЛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП?
- рд╕реНрдерд╛рдиреАрдпрд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдЯреЛрд░реЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдХреБрдВрдЬреА / рдорд╛рди рдЬреЛрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрднреА-рдХрднреА рдЙрдирдХреЗ рдорд┐рд╢реНрд░рдг рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдп рд╕реВрдЪреА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рджреЗрдЦреЗрдВрдЧреЗ)ред
- рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЧреБрдкреНрдд рдпрд╛ рдирд┐рдЬреА рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд┐рд░реНрднрд░)ред
рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:- Storage.key (n) - рдХреБрдВрдЬреА рдирд╛рдо рдХреЗ рд╕рд╛рде index n
- Storage.getItem () - рдЖрдЗрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- Storage.setItem () - рдПрдХ рдЖрдЗрдЯрдо рд▓рд┐рдЦреЗрдВ
- Storage.removeItem () - рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдПрдВ
- Storage.clear () - рдХреНрд▓рд┐рдпрд░ рд╕реНрдЯреЛрд░реЗрдЬ
- Storage.length - рднрдВрдбрд╛рд░рдг рд▓рдВрдмрд╛рдИ (рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ - рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ)
рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:interface Storage {
readonly attribute unsigned long length;
DOMString? key(unsigned long index);
getter DOMString? getItem(DOMString key);
setter void setItem(DOMString key, DOMString value);
deleter void removeItem(DOMString key);
void clear();
};
рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рдирд┐рдореНрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:localStorage.color = 'deepskyblue'
localStorage[color] = 'deepskyblue'
localStorage.setItem('color', 'deepskyblue')
рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:localStorage.getItem('color')
localStorage['color']
рд╕реНрдЯреЛрд░реЗрдЬ рдХреАрдЬрд╝ рдкрд░ рдЗрдЯрд░реЗрдЯ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рд╡реИрд▓реНрдпреВрдЬрд╝ рдХреИрд╕реЗ рдкрд╛рдПрдБ?
for (let i = 0; i < localStorage.length; i++) {
let key = localStorage.key(i)
console.log(`${key}: ${localStorage.getItem(key)}`)
}
let keys = Object.keys(localStorage)
for (let key of keys) {
console.log(`${key}: ${localStorage.getItem(key)}`)
}
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рднрдВрдбрд╛рд░рдг рдореЗрдВ рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ JSON.stringify () - JSON.parse () рдЕрдЧреНрд░рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:localStorage.user = {
name: 'Harry'
}
console.dir(localStorage.user)
localStorage.user = JSON.stringify({
name: 'Harry'
})
let user = JSON.parse(localStorage.user)
console.dir(user.name)
рд╕реНрдерд╛рдиреАрдпрд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдИрд╡реЗрдВрдЯ рд╣реИ - рд╕реНрдЯреЛрд░реЗрдЬ (рдСрдирд╕реНрдЯреЛрд░реЗрдЬ), рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдбреЗрдЯрд╛ рд▓рд┐рдЦрд╛ / рдбрд┐рд▓реАрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реИрдВ:- рдХреА - рдХреБрдВрдЬреА
- рдкреБрд░рд╛рдирд╛ рдорд╛рди - рдкреБрд░рд╛рдирд╛ рдореВрд▓реНрдп
- newValue - рдирдпрд╛ рдореВрд▓реНрдп
- url - рднрдВрдбрд╛рд░рдг рдкрддрд╛
- StorageArea - рд╡рд╣ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:[Constructor(DOMString type, optional StorageEventInit eventInitDict)]
interface StorageEvent : Event {
readonly attribute DOMString? key;
readonly attribute DOMString? oldValue;
readonly attribute DOMString? newValue;
readonly attribute DOMString url;
readonly attribute Storage? storageArea;
};
dictionary StorageEventInit : EventInit {
DOMString? key;
DOMString? oldValue;
DOMString? newValue;
DOMString url;
Storage? storageArea;
};
рдХреНрдпрд╛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ?
Storage.prototype.removeItems = function() {
for (item in arguments) {
this.removeItem(arguments[item])
}
}
localStorage.setItem('first', 'some value')
localStorage.setItem('second', 'some value')
localStorage.removeItems('first', 'second')
console.log(localStorage.length)
рд╕реНрдерд╛рдиреАрдпрд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ?
localStorage.setItem('name', 'Harry')
function isExist(name) {
return (!!localStorage[name])
}
isExist('name')
function isItemExist(name) {
return (name in localStorage)
}
isItemExist('name')
рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдкрд░реНрдпрд╛рдкреНрдд рд╢рдмреНрдж, рдпрд╣ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИредрдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рд╕рдордп рдпрд╛рдж рд░рдЦреЗрдВ
window.onload = () => {
let video = document.querySelector('video')
if(localStorage.currentTime) {
video.currentTime = localStorage.currentTime
}
video.addEventListener('timeupdate', () => localStorage.currentTime = video.currentTime)
}
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╡реАрдбрд┐рдпреЛ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрд╕рд░реЗ рд╕реЗрдХрдВрдб рдкрд░ рдкреНрд▓реЗрдмреИрдХ рд░реЛрдХреЗрдВред рдЬрд┐рд╕ рд╕рдордп рд╣рдордиреЗ рдЫреЛрдбрд╝рд╛ рд╣реИ рд╡рд╣ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдпрд╛ рдмрдВрдж / рдЦреЛрд▓реЗрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рд╕рдордп рд╕рдорд╛рди рд╣реИредCodepenGithubрд╣рдо рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
рдорд╛рд░реНрдХрдЕрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:<form>
Login: <input type="text">
Password: <input type="text">
<input type="submit">
</form>
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлреЙрд░реНрдо рдФрд░ рддреАрди "рдЗрдирдкреБрдЯ" рд╣реИрдВред рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП, рд╣рдо <рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = "рдЯреЗрдХреНрд╕реНрдЯ"> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рд╕рд╣реА рдкреНрд░рдХрд╛рд░ (рдкрд╛рд╕рд╡рд░реНрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд░реЛрдо рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рдЬреЛ рд╣рдореЗрдВ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛редрдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
let form = document.querySelector('form')
let login = document.querySelector('input')
let password = document.querySelector('input + input')
if (localStorage.length != 0) {
login.value = localStorage.login
password.value = localStorage.password
}
form.addEventListener('submit', () => {
localStorage.login = login.value
localStorage.password = password.value
if (login.value == 'hello' && password.value == 'world') {
document.write('welcome')
}
})
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдлрд╝реЙрд░реНрдо рдХреЛ "рдорд╛рдиреНрдп" рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╣рдо рдЬрд╛рджреВ рд╢рдмреНрджреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рд╕реНрдерд╛рдиреАрдпрд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреЗрдЬ рдкрд░ рдПрдХ рдЧреНрд░реАрдЯрд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредCodepenGithubрдХрд╛рд░реНрдп рд╕реВрдЪреА рдХрд╛ рддрд░реНрдХ рд▓рд┐рдЦрдирд╛
рдорд╛рд░реНрдХрдЕрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:<input type="text"><button class="add">add task</button><button class="clear">clear storage</button>
<ul></ul>
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ "рдЗрдирдкреБрдЯ" рд╣реИ, рд╕реВрдЪреА рдореЗрдВ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди, рд╕реВрдЪреА рдФрд░ рднрдВрдбрд╛рд░рдг рдХреА рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдФрд░ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИредрдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
let input = document.querySelector('input')
input.focus()
let addButton = document.querySelector('.add')
let list = document.querySelector('ul')
if (localStorage.length != 0) {
for (let i = 0; i < localStorage.length; i++) {
let key = localStorage.key(i)
let template = `${localStorage.getItem(key)}`
list.insertAdjacentHTML('afterbegin', template)
}
document.querySelectorAll('.close').forEach(b => {
b.addEventListener('click', e => {
let item = e.target.parentElement
list.removeChild(item)
localStorage.removeItem(`${item.dataset.id}`)
})
})
}
window.addEventListener('keydown', e => {
if (e.keyCode == 13) addButton.click()
})
addButton.addEventListener('click', () => {
let text = input.value
let template = `<li data-id="${++localStorage.length}"><button class="close">V</button><time>${new Date().toLocaleDateString()}</time> <p>${text}</p></li>`
list.insertAdjacentHTML('afterbegin', template)
localStorage.setItem(`${++localStorage.length}`, template)
input.value = ''
document.querySelector('.close').addEventListener('click', e => {
let item = e.target.parentElement
list.removeChild(item)
localStorage.removeItem(`${item.dataset.id}`)
})
})
document.querySelector('.clear').onclick = () => {
localStorage.clear()
document.querySelectorAll('li').forEach(item => list.removeChild(item))
input.focus()
}
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдХрд╛рд░реНрдп рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реВрдЪреА рднрдВрдбрд╛рд░рдг рдХреЗ рдбреЗрдЯрд╛ рд╕реЗ рдмрдирддреА рд╣реИ (рдЗрд╕рдореЗрдВ рдорд┐рд╢реНрд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
рд╣рд░реЗ рдЪреЗрдХрдорд╛рд░реНрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╕реВрдЪреА рд╕реЗ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬреА / рдорд╛рди рдЬреЛрдбрд╝реА рдирд┐рдХрд▓ рдЬрд╛рддреА рд╣реИредCodepenGithubрдЪреИрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдорд╛рд░реНрдХрдЕрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:<input type="text">
<button class="send">send message</button>
<button class="save">save chat</button>
<button class="clear">clear chat</button>
<div></div>
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрджреЗрд╢, рддреАрди рдмрдЯрди рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рд╣реИ: рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЪреИрдЯ рдФрд░ рднрдВрдбрд╛рд░рдг рдХреА рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░редрдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
let input = document.querySelector('input')
input.focus()
let sendButton = document.querySelector('.send')
let saveButton = document.querySelector('.save')
let clearButton = document.querySelector('.clear')
let box = document.querySelector('div')
if (localStorage.messages) {
localStorage.messages
.split('</p>,')
.map(p => box.insertAdjacentHTML('beforeend', p))
}
sendButton.addEventListener('click', () => {
let text = document.querySelector('input').value
let template = `<p><time>${new Date().toLocaleTimeString()}</time> ${text}</p>`
box.insertAdjacentHTML('afterbegin', template)
input.value = ''
localStorage.message = template
})
window.addEventListener('keydown', e => {
if (e.keyCode == 13) sendButton.click()
})
window.addEventListener('storage', event => {
if (event.key == 'messages') return
event.newValue == null ? clearButton.click() : box.insertAdjacentHTML('afterbegin', event.newValue)
})
saveButton.addEventListener('click', () => {
let messages = []
document.querySelectorAll('p').forEach(p => messages.push(p.outerHTML))
localStorage.messages = messages
})
clearButton.addEventListener('click', () => {
localStorage.clear()
document.querySelectorAll('p').forEach(p => box.removeChild(p))
input.focus()
})
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╕рдВрджреЗрд╢ рд╕реНрдерд╛рдиреАрдпрд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред "рд╕реНрдЯреЛрд░реЗрдЬ" рдЗрд╡реЗрдВрдЯ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЬрдм рдХреЛрдИ рдЪреИрдЯ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рднреА рд╕рдВрджреЗрд╢ рд╕реНрдерд╛рдиреАрдпрд╕реНрдЯреЛрд░реЗрдЬрд╝ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредCodepenGithubрдЦрд░реАрджрд╛рд░реА рдХреА рдЯреЛрдХрд░реА рд▓реЗрдЖрдЙрдЯ
рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЯреЛрдХрд░реА рдмрдирд╛рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб "рдкреБрд░рд╛рдиреА рд╢реИрд▓реА рдореЗрдВ" рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛редрдПрдХ рдЙрддреНрдкрд╛рдж рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:<div class="item">
<h3 class="title">Item1</h3>
<img src="http://placeimg.com/150/200/tech" alt="#">
<p>Price: <span class="price">1000</span></p>
<button class="add" data-id="1">Buy</button>
</div>
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░, рдорд╛рд▓ рдХрд╛ рдирд╛рдо, рдЫрд╡рд┐ рдФрд░ рдореВрд▓реНрдп рд╣реИ, рд╕рд╛рде рд╣реА рдЯреЛрдХрд░реА рдореЗрдВ рд╕рд╛рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рднреА рд╣реИредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреЛрдХрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рднреА рд╣реИ рдФрд░ рдЯреЛрдХрд░реА рдФрд░ рднрдВрдбрд╛рд░рдг рдХреЛ рдЦрд╛рд▓реА рдХрд░ рджреЗрдирд╛ рд╣реИ рдФрд░ рдЯреЛрдХрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИред<div class="buttons">
<button id="open">Cart</button>
<button id="clear">Clear</button>
</div>
<div id="content"></div>
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
let itemBox = document.querySelectorAll('.item'),
cart = document.getElementById('content');
function getCartData() {
return JSON.parse(localStorage.getItem('cart'));
}
function setCartData(o) {
localStorage.setItem('cart', JSON.stringify(o));
}
function addToCart() {
this.disabled = true;
let cartData = getCartData() || {},
parentBox = this.parentNode,
itemId = this.getAttribute('data-id'),
itemTitle = parentBox.querySelector('.title').innerHTML,
itemPrice = parentBox.querySelector('.price').innerHTML;
if (cartData.hasOwnProperty(itemId)) {
cartData[itemId][2] += 1;
} else {
cartData[itemId] = [itemTitle, itemPrice, 1];
}
if (!setCartData(cartData)) {
this.disabled = false;
}
}
for (let i = 0; i < itemBox.length; i++) {
itemBox[i].querySelector('.add').addEventListener('click', addToCart)
}
function openCart() {
let cartData = getCartData(),
totalItems = '',
totalGoods = 0,
totalPrice = 0;
if (cartData !== null) {
totalItems = '<table><tr><th>Name</th><th>Price</th><th>Amount</th></tr>';
for (let items in cartData) {
totalItems += '<tr>';
for (let i = 0; i < cartData[items].length; i++) {
totalItems += '<td>' + cartData[items][i] + '</td>';
}
totalItems += '</tr>';
totalGoods += cartData[items][2];
totalPrice += cartData[items][1] * cartData[items][2];
}
totalItems += '</table>';
cart.innerHTML = totalItems;
cart.append(document.createElement('p').innerHTML = 'Goods: ' + totalGoods + '. Price: ' + totalPrice);
} else {
cart.innerHTML = 'empty';
}
}
document.getElementById('open').addEventListener('click', openCart);
document.getElementById('clear').addEventListener('click', () => {
localStorage.removeItem('cart');
cart.innerHTML = 'leared';
});
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЪрдпрдирд┐рдд рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рдЖрдк рдХрд╛рд░реНрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрд▓ рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИредCodepenGithubрдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред