Я сделал две кнопки для изменения отступов на моем сайте. Они работают, однако я должен установить отступы для nav, main и footer вручную в CSS. Вот код:
main {
padding: 20px 25%;
}
footer {
padding: 5px 25%;
}
nav {
padding: 0 25%;
}
var padding = 15;
$('#paddingPlus').click(function() {
switch(padding) {
case 0:
changePadding(5);
padding = 5;
break;
case 5:
changePadding(10);
padding = 10;
break;
case 10:
changePadding(15);
padding = 15;
break;
case 15:
changePadding(20);
padding = 20;
break;
case 20:
changePadding(25);
padding = 25;
break;
case 25:
changePadding(30);
padding = 30;
break;
case 30:
alert('You have reached the maximum ammount of padding!');
break;
}
});
$('#paddingMinus').click(function() {
switch(padding) {
case 0:
alert('You have reached the minimum ammount of padding!');
break;
case 5:
changePadding(0);
padding = 0;
break;
case 10:
changePadding(5);
padding = 5;
break;
case 15:
changePadding(10);
padding = 10;
break;
case 20:
changePadding(15);
padding = 15;
break;
case 25:
changePadding(20);
padding = 20;
break;
case 30:
changePadding(25);
padding = 25;
break;
}
});
function changePadding(pad) {
$('nav').css('padding', '0 ' + pad + '%');
$('main').css('padding', '20px ' + pad + '%');
$('footer').css('padding', '5px ' + pad + '%');
}
Я попытался сделать это с помощью localstorage, чтобы сохранить заполнение, но это не работает, и хром не показывает мне сообщения об ошибке. Вот код:
main { }
footer { }
nav { }
switch(localStorage.getItem('padding')) {
case 0:
changePadding(0);
localStorage.setItem('padding', 0);
break;
case 5:
changePadding(5);
localStorage.setItem('padding', 5);
break;
case 10:
changePadding(10);
localStorage.setItem('padding', 10);
break;
case 15:
changePadding(15);
localStorage.setItem('padding', 15);
break;
case 20:
changePadding(20);
localStorage.setItem('padding', 20);
break;
case 25:
changePadding(25);
localStorage.setItem('padding', 35);
break;
case 30:
changePadding(30);
localStorage.setItem('padding', 30);
break;
default:
changePadding(15);
localStorage.setItem('padding', 15);
}
$('#paddingPlus').click(function() {
switch(localStorage.getItem('padding')) {
case 0:
changePadding(5);
localStorage.setItem('padding', 5);
break;
case 5:
changePadding(10);
localStorage.setItem('padding', 10);
break;
case 10:
changePadding(15);
localStorage.setItem('padding', 15);
break;
case 15:
changePadding(20);
localStorage.setItem('padding', 20);
break;
case 20:
changePadding(25);
localStorage.setItem('padding', 25);
break;
case 25:
changePadding(30);
localStorage.setItem('padding', 30);
break;
case 30:
alert('You have reached the maximum ammount of padding!');
break;
}
});
$('#paddingMinus').click(function() {
switch(localStorage.getItem('padding')) {
case 0:
alert('You have reached the minimum ammount of padding!');
break;
case 5:
changePadding(0);
localStorage.setItem('padding', 0);
break;
case 10:
changePadding(5);
localStorage.setItem('padding', 5);
break;
case 15:
changePadding(10);
localStorage.setItem('padding', 10);
break;
case 20:
changePadding(15);
localStorage.setItem('padding', 15);
break;
case 25:
changePadding(20);
localStorage.setItem('padding', 20);
break;
case 30:
changePadding(25);
localStorage.setItem('padding', 25);
break;
}
});
function changePadding(pad) {
$('nav').css('padding', '0 ' + pad + '%');
$('main').css('padding', '20px ' + pad + '%');
$('footer').css('padding', '5px ' + pad + '%');
}
Я был бы очень признателен, если бы кто-нибудь мог сказать мне, где моя ошибка. заранее спасибо
3 ответа
Чтобы расширить предыдущий ответ, это помогает?
$('#paddingPlus').click(function() {
let padding = parseInt(localStorage.getItem('padding'));
if (padding >== 30) {
alert('You have reached the maximum ammount of padding!');
} else {
padding += 5;
changePadding(padding);
}
}
$('#paddingMinus').click(function() {
let padding = parseInt(localStorage.getItem('padding'));
if (padding === 0) {
alert('You have reached the minimum ammount of padding!');
} else {
padding -= 5;
changePadding(padding);
}
}
function changePadding(pad) {
localStorage.setItem('padding', pad);
$('nav').css('padding', '0 ' + pad + '%');
$('main').css('padding', '20px ' + pad + '%');
$('footer').css('padding', '5px ' + pad + '%');
}
Попробуйте преобразовать заполнение, которое вы получаете от localStorage.getItem('padding')
, в Number
(т. Е. parseInt(localStorage.getItem('padding'))
). Когда вы получаете элемент от localstorage
, он возвращает String
, поэтому ваш case
не работает.
Отчасти проблема связана с приведением типа из строки к целому числу при работе со значением pad
, а также из-за того, что ваш второй пример кода не обновляет значение localStorage.
Вы можете решить обе эти проблемы и упростить код, просто добавив к значению в каждом обработчике событий вместо использования оператора switch
, а также прочитав значение из localStorage
вместо того, чтобы полагаться на глобальные переменная . Попробуй это:
<nav>Navigation</nav>
<main>Main content</main>
<footer>Footer</footer>
<button class="padding" data-change="5">+</button>
<button class="padding" data-change="-5">-</button>
function setPadding(pad, change) {
pad = pad == null ? 15 : parseInt(pad, 10);
pad += (parseInt(change, 10) || 0);
if (pad < 0) {
alert('You have reached the minimum ammount of padding!');
return;
}
if (pad > 30) {
alert('You have reached the minimum ammount of padding!');
return;
}
localStorage.setItem('padding', pad);
$('nav').css('padding', '0 ' + pad + '%');
$('main').css('padding', '20px ' + pad + '%');
$('footer').css('padding', '5px ' + pad + '%');
}
// retrieve the value and set when the page loads
setPadding(localStorage.getItem('padding'));
// update the value when either button is clicked
$('.padding').click(function() {{
setPadding(localStorage.getItem('padding'), this.dataset.change);
});
Вот рабочий пример этого в jsFiddle , так как фрагменты SO ограничены в доступе к localStorage.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.