Как я могу скрыть это поле настроек при нажатии на значок шестеренки и в любом месте за пределами тела?

это CSS, который я использую.

.setting-box 
{
position: fixed;
left:-200px;
top:0;
width: 200px;
z-index: 1000;
min-height: 100vh; 
}
.toggle-setting 
{
position: absolute;
right: -34px;
top: 6em;
background: #fff;
border-radius: 0px 5px 5px 0;
text-align: center;
cursor: pointer; 
}

Я пробовал много вещей, но это не работает!

этот код работает очень хорошо, но.

за исключением случаев, когда я нажимаю на страницу, окно настроек не закрывается

$('.setting-box .toggle-setting').on('click',function () {
$(this).parent('.setting-box').toggleClass('open');

if ($(this).parent('.setting-box').hasClass('open')) {
$(this).parent('.setting-box').animate({
        left:0,
        },1000);

     } else {
       $(this, 'body').parent('.setting-box').animate({
            left:'-200'
      },1000);
     }
});
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
106
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете попробовать это.

РЕДАКТИРОВАТЬ

var clicked = false;

$('.setting-box .toggle-setting').on('click',function () {

if (clicked == false) {
$(this).parent('.setting-box').animate({
        'left' : '0',
        },1000);
  clicked = true;
     } else {
$(this).parent('.setting-box').animate({
        'left' : '-200px',
        },1000);
  clicked = false;
 }
console.info(clicked);
});

$(document).click( function () {
 var target = $(event.target);
 if (!target.is(".toggle-setting") && !target.is('.setting-box') && clicked == true) {
  $('.setting-box').animate({
     'left' :'-200px',
  },1000);
   clicked = false;
   console.info(clicked);
 }
});

Вы можете поместить блок настроек в другой блок, поместить настройки в align:center;, добавить из этого из z-index:; и сделать при нажатии на шестеренку или куда угодно, чтобы этот блок принял стиль display:none;. Это может помочь вам.

Ответ принят как подходящий

первая функция переключает поле настройки;

$('#gear-button').click(function() {
  $(".setting-box").toggleClass("display-block");
});

вторая функция скрывает окно настройки при щелчке документа (щелчок по телу)

// hide setting box on body click
$(document).on('click', function() {
  $(".setting-box").removeClass("display-block");
});

третья функция останавливает событие щелчка, когда пользователь нажимает кнопку или поле настройки, чтобы предотвратить щелчок документа

$("#gear-button, .setting-box").click(function(e) {
  e.stopPropagation();
})

В общем, вы можете использовать этот шаблон для добавления собственной анимации и классов.

полный пример:

JSFiddle

Другие вопросы по теме