Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.09.2017, 19:05
Аспирант
Отправить личное сообщение для dupre Посмотреть профиль Найти все сообщения от dupre
 
Регистрация: 24.05.2014
Сообщений: 40

Добавить click к body
Что нужно дописать к данному коду, чтобы возврат к исходному состоянию (Меню) можно было реализовать, как через клик по .openclosebtn, так и через клик по body?
<div id="main">
 <span class="openclosebtn">Меню</span>
</div>

$('.openclosebtn').click(function(){
  if (!$(this).data('status')) {
  	$(this).html('Close');
    $(this).data('status', true);
  }
  else {
  	$(this).html('Меню');
    $(this).data('status', false);
  }
});
Ответить с цитированием
  #2 (permalink)  
Старый 13.09.2017, 19:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,823

dupre,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css"> #main .openclosebtn{
    background-color: #228B22;
    color: #FFFFFF;
    padding: 5px 12px;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
$('.openclosebtn, html').click(function(event){
  var btn = $('.openclosebtn'), status = !btn.data('status');
  if ($(this).is(btn) && status) {
    event.stopPropagation();
  	btn.html('Close')
    .data('status', status);
  }
  else {
  	btn.html('Меню')
    .data('status', false);
  }
});
});
  </script>
</head>

<body>
<div id="main">
 <span class="openclosebtn">Меню</span>
</div>




</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 13.09.2017, 20:01
Аспирант
Отправить личное сообщение для dupre Посмотреть профиль Найти все сообщения от dupre
 
Регистрация: 24.05.2014
Сообщений: 40

рони,
я пробую через твой код с открывающимся .sidenav
window.addEventListener('DOMContentLoaded', function() {
	var body = document.querySelector('body');
	document.addEventListener("click", function(event) {
		var target = event.target;
		if (target.closest(".sidenav") && !target.closest(".closebtn")) return;
		else if (target.closest("#main")) {
			event.preventDefault();
			body.classList.toggle("open")
		} else body.classList.remove("open");
	});
});


Работает так: кликаю sidenav, текс меняется, но сайдбар открывается только по второму клику. Выгрузил код на jsfiddle, чтоб наглядно посмотреть, но там не работает вовсе..
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2017, 20:05
Аспирант
Отправить личное сообщение для dupre Посмотреть профиль Найти все сообщения от dupre
 
Регистрация: 24.05.2014
Сообщений: 40

То есть: по первому клику меняется текст, и только по второму клику открывается сайдбар. При закрытии сайдбара тоже самое.

Последний раз редактировалось dupre, 13.09.2017 в 20:07.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2017, 20:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,823

dupre,
не могу догадаться, что вы хотите.
Ответить с цитированием
  #6 (permalink)  
Старый 13.09.2017, 20:40
Аспирант
Отправить личное сообщение для dupre Посмотреть профиль Найти все сообщения от dupre
 
Регистрация: 24.05.2014
Сообщений: 40

рони, весь код с которым вожусь. Хотел сделать: клик по .sidenav меняет текст и одновременно открывает либо закрывает сайдбар; всё это работает, но чуток не так: клик по .sidenav меняет текст, а сайдбар открывается либо закрывается только по второму клику. То есть, чтобы открыть сайдбар нужно кликнуть openclosebtn два раза, чтоб закрыть то же два раза..
<!DOCTYPE html>
<html lang="ru">

<head>
	<meta charset="UTF-8">
	<title>Главная</title>
	<link rel="stylesheet" href="css/libs.min.css">
	<link rel="stylesheet" href="css/main.css">
	<link rel="stylesheet" href="fonts/stylesheet.css">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

</head>
<body>
	<div id="mySidenav" class="sidenav">
		<span class="nav_top_word">Список Меню</span>
		<ul class="breadcrumbs">
			<li>
				<a href="index.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
			<li>
				<a href="documents.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
			<li>
				<a href="service.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
			<li>
				<a href="news.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
			<li>
				<a href="gallery.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
			<li>
				<a href="reports.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
			<li>
				<a href="contacts.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
			<li>
				<a href="contacts.html" target="_blank">Lorem</a>
				<p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
			</li>
		</ul>
	</div>
	<div id="main">
			<span class="openclosebtn">Меню</span>
	</div>
	<script src="js/libs.min.js"></script>
	<script src="js/common.js"></script>
</body>

</html>

body {
  font-family: 'play', sans-serif;
  color: #343741;
  position: relative;
  -webkit-transition: all 0.5s;
  -o-transition: all 0.5s;
  transition: all 0.5s;
  background: #f9f9f9;
}
.wrapper {
  position: absolute;
}
.wrapper main {
  padding-left: 300px;
  width: 700px;
  height: 2000px;
  margin-top: 200px;
}
.nav_top_word,
p,
a {
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);
}
.sidenav {
  height: 100%;
  width: 0;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  background: #fff;
  overflow-x: hidden;
  -webkit-transition: 0.5s;
  -o-transition: 0.5s;
  transition: 0.5s;
}
.sidenav .nav_top_word {
  position: relative;
  height: 95px;
  background: #F5F8FC;
  color: #0072ce;
  font-size: 18px;
  font-weight: 700;
  font-style: normal;
  line-height: 95px;
  padding-left: 17px;
  display: block;
  min-width: 300px;
}
.sidenav .nav_top_word:before {
  position: absolute;
  content: '';
  display: block;
  height: 10px;
  width: 10px;
  border: 2px solid #004ea8;
  border-left: none;
  border-bottom: none;
  -webkit-transform: rotate(135deg);
      -ms-transform: rotate(135deg);
          transform: rotate(135deg);
  top: 35px;
  left: 340px;
}

.sidenav a {
  font-size: 18.5px;
  font-weight: 700;
  font-style: normal;
  padding: 8px 8px 8px 13px;
  text-decoration: none;
  color: #004ea8;
  display: block;
  letter-spacing: 1px;
}
.breadcrumbs {
  margin-top: 70px;
  padding-bottom: 50px;
}
.breadcrumbs li {
  position: relative;
  height: 119px;
}
.breadcrumbs li:hover::after {
  position: absolute;
  content: '';
  display: block;
  height: 10px;
  width: 10px;
  border: 2px solid #fff;
  border-left: none;
  border-bottom: none;
  -webkit-transform: rotate(45deg);
      -ms-transform: rotate(45deg);
          transform: rotate(45deg);
  top: 20px;
  left: 340px;
}
.breadcrumbs li:hover {
  background: #0072ce;
}
.breadcrumbs li:hover p,
.breadcrumbs li:hover a {
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);
}
.breadcrumbs li:hover a {
  text-decoration: underline;
}
.breadcrumbs li:hover:hover * {
  color: #fff;
}
.breadcrumbs p {
  font-size: 14.5px;
  font-style: normal;
  font-weight: 400;
  width: 300px;
  padding: 51px 0 12px 13px;
  line-height: 1.2;
  letter-spacing: .5px;
}
.breadcrumbs a {
  position: absolute;
  height: 100%;
  width: 100%;
  top: 8px;
}
.breadcrumbs a::after {
  position: absolute;
  content: '';
  display: block;
  height: 10px;
  width: 10px;
  border: 2px solid #000;
  border-left: none;
  border-bottom: none;
  -webkit-transform: rotate(45deg);
      -ms-transform: rotate(45deg);
          transform: rotate(45deg);
  top: 12px;
  left: 340px;
}
#main {
  position: fixed;
  left: 0px;
  top: 0;
  -webkit-transition: left .5s;
  -o-transition: left .5s;
  transition: left .5s;
  width: 100%;
  height: 89px;
  line-height: 89px;
  text-align: left;
  background: #343741;
  z-index: 100;
}
#main span {
  position: relative;
  display: inline-block;
  font-size: 18px;
  font-weight: 400;
  font-style: normal;
  color: #E5E8ED;
  margin-left: 80px;
  border: 1px solid #fff;
  -webkit-border-radius: 2px;
          border-radius: 2px;
  cursor: pointer;
  line-height: 2;
  padding: 0 10px 0 10px;
}
#main span:hover {
  color: #004ea8;
  background: #fff;
  border-color: #004ea8;
}
body.open {
  margin-left: 380px;
}
body.open .sidenav {
  width: 380px;
}
body.open #main {
  left: 380px;
}
body:after {
  opacity: 0;
  content: "";
}
body.open:after {
  content: "";
  z-index: 99;
  background-color: #343741;
  opacity: .3;
  left: 380px;
  right: 0;
  top: 0;
  bottom: 0;
  position: fixed;
  -webkit-transition: all 0.3s 0.3s;
  -o-transition: all 0.3s 0.3s;
  transition: all 0.3s 0.3s;
}
/*
==================================================
home page
==================================================
*/
.wrapper img {
  margin: 0 auto;
}


window.addEventListener('DOMContentLoaded', function() {
	var body = document.querySelector('body');
	document.addEventListener("click", function(event) {
		var target = event.target;
		if (target.closest(".sidenav") && !target.closest(".closebtn")) return;
		else if (target.closest("#main")) {
			event.preventDefault();
			body.classList.toggle("open")
		} else body.classList.remove("open");
	});
});

 $(function() {
$('.openclosebtn, html').click(function(event){
  var btn = $('.openclosebtn'), status = !btn.data('status');
  if ($(this).is(btn) && status) {
    event.stopPropagation();
    btn.html('Close')
    .data('status', status);
  }
  else {
    btn.html('Меню')
    .data('status', false);
  }
});
});
Ответить с цитированием
  #7 (permalink)  
Старый 13.09.2017, 20:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,823

dupre,
зачем потребовалось jquery? чтобы сменить текст, достаточно css и прежнего js
Ответить с цитированием
  #8 (permalink)  
Старый 13.09.2017, 20:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,823

dupre,
.openclosebtn:after {
  content: "Меню";
}
body.open .openclosebtn:after {
   content: "Close";
}


и убрать текст из кнопки
<div id="main">
      <span class="openclosebtn"></span>
  </div>
Ответить с цитированием
  #9 (permalink)  
Старый 13.09.2017, 21:01
Аспирант
Отправить личное сообщение для dupre Посмотреть профиль Найти все сообщения от dupre
 
Регистрация: 24.05.2014
Сообщений: 40

В js я пока ничего можно сказать не смыслю, ну поменяю размер шрифта или цвет у всех тегов "р" на странице )

В css хоть что-то, но понимаю, но тем не менее не представляю, как это можно сделать на css...
Ответить с цитированием
  #10 (permalink)  
Старый 13.09.2017, 21:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 20,823

dupre,
<!DOCTYPE html>
<html lang="ru">

<head>
  <meta charset="UTF-8">
  <title>Главная</title>
<style type="text/css">
body {
  font-family: 'play', sans-serif;
  color: #343741;
  position: relative;
  -webkit-transition: all 0.5s;
  -o-transition: all 0.5s;
  transition: all 0.5s;
  background: #f9f9f9;
}
.wrapper {
  position: absolute;
}
.wrapper main {
  padding-left: 300px;
  width: 700px;
  height: 2000px;
  margin-top: 200px;
}
.nav_top_word,
p,
a {
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);
}
.sidenav {
  height: 100%;
  width: 0;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  background: #fff;
  overflow-x: hidden;
  -webkit-transition: 0.5s;
  -o-transition: 0.5s;
  transition: 0.5s;
}
.sidenav .nav_top_word {
  position: relative;
  height: 95px;
  background: #F5F8FC;
  color: #0072ce;
  font-size: 18px;
  font-weight: 700;
  font-style: normal;
  line-height: 95px;
  padding-left: 17px;
  display: block;
  min-width: 300px;
}
.sidenav .nav_top_word:before {
  position: absolute;
  content: '';
  display: block;
  height: 10px;
  width: 10px;
  border: 2px solid #004ea8;
  border-left: none;
  border-bottom: none;
  -webkit-transform: rotate(135deg);
      -ms-transform: rotate(135deg);
          transform: rotate(135deg);
  top: 35px;
  left: 340px;
}

.sidenav a {
  font-size: 18.5px;
  font-weight: 700;
  font-style: normal;
  padding: 8px 8px 8px 13px;
  text-decoration: none;
  color: #004ea8;
  display: block;
  letter-spacing: 1px;
}
.breadcrumbs {
  margin-top: 70px;
  padding-bottom: 50px;
}
.breadcrumbs li {
  position: relative;
  height: 119px;
}
.breadcrumbs li:hover::after {
  position: absolute;
  content: '';
  display: block;
  height: 10px;
  width: 10px;
  border: 2px solid #fff;
  border-left: none;
  border-bottom: none;
  -webkit-transform: rotate(45deg);
      -ms-transform: rotate(45deg);
          transform: rotate(45deg);
  top: 20px;
  left: 340px;
}
.breadcrumbs li:hover {
  background: #0072ce;
}
.breadcrumbs li:hover p,
.breadcrumbs li:hover a {
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);
}
.breadcrumbs li:hover a {
  text-decoration: underline;
}
.breadcrumbs li:hover:hover * {
  color: #fff;
}
.breadcrumbs p {
  font-size: 14.5px;
  font-style: normal;
  font-weight: 400;
  width: 300px;
  padding: 51px 0 12px 13px;
  line-height: 1.2;
  letter-spacing: .5px;
}
.breadcrumbs a {
  position: absolute;
  height: 100%;
  width: 100%;
  top: 8px;
}
.breadcrumbs a::after {
  position: absolute;
  content: '';
  display: block;
  height: 10px;
  width: 10px;
  border: 2px solid #000;
  border-left: none;
  border-bottom: none;
  -webkit-transform: rotate(45deg);
      -ms-transform: rotate(45deg);
          transform: rotate(45deg);
  top: 12px;
  left: 340px;
}
#main {
  position: fixed;
  left: 0px;
  top: 0;
  -webkit-transition: left .5s;
  -o-transition: left .5s;
  transition: left .5s;
  width: 100%;
  height: 89px;
  line-height: 89px;
  text-align: left;
  background: #343741;
  z-index: 100;
}
#main span {
  position: relative;
  display: inline-block;
  font-size: 18px;
  font-weight: 400;
  font-style: normal;
  color: #E5E8ED;
  margin-left: 80px;
  border: 1px solid #fff;
  -webkit-border-radius: 2px;
          border-radius: 2px;
  cursor: pointer;
  line-height: 2;
  padding: 0 10px 0 10px;
}
#main span:hover {
  color: #004ea8;
  background: #fff;
  border-color: #004ea8;
}
body.open {
  margin-left: 380px;
}
body.open .sidenav {
  width: 380px;
}
body.open #main {
  left: 380px;
}
.openclosebtn:after {
  content: "Меню";
}
body.open .openclosebtn:after {
   content: "Close";
}

body:after {
  opacity: 0;
  content: "";
}
body.open:after {
  content: "";
  z-index: 99;
  background-color: #343741;
  opacity: .3;
  left: 380px;
  right: 0;
  top: 0;
  bottom: 0;
  position: fixed;
  -webkit-transition: all 0.3s 0.3s;
  -o-transition: all 0.3s 0.3s;
  transition: all 0.3s 0.3s;
}
/*
==================================================
home page
==================================================
*/
.wrapper img {
  margin: 0 auto;
}

</style>

</head>
<body>
  <div id="mySidenav" class="sidenav">
    <span class="nav_top_word">Список Меню</span>
    <ul class="breadcrumbs">
      <li>
        <a href="index.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
      <li>
        <a href="documents.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
      <li>
        <a href="service.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
      <li>
        <a href="news.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
      <li>
        <a href="gallery.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
      <li>
        <a href="reports.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
      <li>
        <a href="contacts.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
      <li>
        <a href="contacts.html" target="_blank">Lorem</a>
        <p>Далеко-далеко за словесными горами в стране, гласных и согласных живут рыбные тексты.</p>
      </li>
    </ul>
  </div>
  <div id="main">
      <span class="openclosebtn"></span>
  </div>
 <script>
   window.addEventListener('DOMContentLoaded', function() {
  var body = document.querySelector('body');
  document.addEventListener("click", function(event) {
    var target = event.target;
    if (target.closest(".sidenav") && !target.closest(".closebtn")) return;
    else if (target.closest("#main")) {
      event.preventDefault();
      body.classList.toggle("open")
    } else body.classList.remove("open");
  });
});

 </script>
</body>

</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить обработчик click с jquery? oo0o jQuery 2 28.09.2016 23:30
Вопрос по clientWidth для элемента body shurik_shink Элементы интерфейса 1 04.05.2016 19:50
к body добавить onselectstart="return false" izcian Общие вопросы Javascript 6 31.10.2013 08:59
Как добавить блок зума не переж body а в необходимый блок? ilyas-> Элементы интерфейса 0 30.07.2013 14:27
Отслеживание body click db_test Events/DOM/Window 2 07.09.2011 22:10