Для того, чтобы вам помогли - выкладывайте код демки на codepen или его аналог - никто не захочет гадать по кофейной гуще.
1) Открытие и закрытие делается обычно через .toggleClass('класс').
К примеру - изначально меню скрыто через display: none, при клики через toggleClass вешается или убирается класс active, в котором задан стиль display: none;
Ну или еще можно делать проверку на наличие display: none, и в зависимости от результата делать либо .show() либо .hide()
2) Скрытие по клику вне области блока делается так:
$(function ($) {
$(document).mouseup(function (e) {
const block = $(".ваш_блок"); // переменная block - это ваш блок, который скрывается/показывается
if (!block.is(e.target)
&& block.has(e.target).length === 0) {
block.removeClass('класс'); // класс который показывает блок, к примеру с display: block
}
});
});