Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.11.2017, 16:35
Новичок на форуме
Отправить личное сообщение для алексей 111 Посмотреть профиль Найти все сообщения от алексей 111
 
Регистрация: 01.11.2017
Сообщений: 5

Можно ли сократить скрипт клика по кнопке
всем прив! разработчики сайта оставили один на один с кодом... приходится как-то разбираться...

Итак, есть блок, раскрывающийся по ссылке "читать далее", при повторном нажатии на неё - блок сворачивался. код JS:
$('.main-card__read').click(function(e) {
	$('.main-card__text').addClass('open'
	$(this).hide(); //удаляет ссылку из кода после нажатия
	e.preventDefault();
});

Я добавил ссылку "свернуть", через CSS - скрытие и показ обеих ссылок, такой код JS получился:
$('.main-card__read').on('click', function(e) {
		if ($('.main-card__text').hasClass('open')) {
			$('.main-card__text').removeClass('open');
			$('.main-card__read').removeClass('open');
			$('.main-card__read_1').removeClass('open');
		}	else {
			$('.main-card__text').addClass('open');
			$('.main-card__read').addClass('open');
			$('.main-card__read_1').addClass('open');
		}
		e.preventDefault();
	});

	$('.main-card__read_1').on('click', function(e) {
		if ($('.main-card__text').hasClass('open')) {
			$('.main-card__text').removeClass('open');
			$('.main-card__read').removeClass('open');
			$('.main-card__read_1').removeClass('open');
		}	
		e.preventDefault();
	});

В итоге два скрипта - первый скрипт на на нажатие "читать далее", второй скрипт на нажатие кнопки "свернуть"...
1. как это все можно (и можно ли?) закинуть в один скрипт? Т.е. чтобы при нажатии на 1-ю кнопку текст разворачивался, надпись ссылки менялась.
2. можно ли сделать, чтобы для мобильных этот же скрипт работал не по выцеливанию надписи на ссылке, а по нажатию на сам блок?
(т.е. в функцию клика вместо ".main-card__read" можно вставить ".main-card" - тогда как раз срабатывание по блоку будет, но как разделить это по размеру экрана - не понимаю...)

на всякий случай HTML и CSS

Код HTML:
<div class="main-card">
	<div class="main-card__pict"><img src="img/card-pict/card-pict-5.png" alt=""></div>
	<div class="main-card__descr">
		<div class="main-card__title">Аэротруба "Аэродинамика" на Юго-Западной - это целый мир экстрим развлечений в одном месте</div>
		<ul class="main-card__list">
			<li style="font-weight: 400;">Кроме самого полета вы сможете:</li>
			<li style="font-weight: 400;">Уничтожить всех немецких асов в "Битве за Берлин"</li>
			<li style="font-weight: 400;">Покорить на горных лыжах Эверест и Эльбрус</li>
			<li style="font-weight: 400;">Устроить Экстрим-Праздник для любой компании</li>
		</ul>
	</div>
	<div class="main-card__text">
		<p>Летите, как птицы, рулите, как шумахеры, пилотируйте, как покрышкины</p>
		<p style="font-weight: 700">текст...</p>
		<p>текст...</p>
		<p>текст...</p>
		<p>текст...</p>
		<p>текст...</p>
	</div>
	<a id="click" href="#" class="main-card__read">Читать далее...</a>
	<a id="click" href="#" class="main-card__read_1">Свернуть</a>
</div>

код CSS:
.main-card__text {
  height: 77px;
  font-size: 16px;
  font-weight: 300;
  color: #1b1b1b;
  overflow: hidden;
  clear: both;
}

.main-card__text.open {
  height: auto;
}

.main-card__read {
  display: block;
  margin-top: 10px;
  margin-bottom: 25px;
  font-size: 16px;
  font-weight: 800;
  color: #239ed7;
}

.main-card__read.open {
  display: none;
}

.main-card__read:hover {
  color: #239ed7;
  text-decoration: underline;
}

.main-card__read_1 {
  display: none;
  margin-top: 10px;
  margin-bottom: 25px;
  font-size: 16px;
  font-weight: 800;
  color: #239ed7;
}

.main-card__read_1.open {
  display: block;
}

.main-card__read_1:hover {
  color: #239ed7;
  text-decoration: underline;
}

Последний раз редактировалось алексей 111, 01.11.2017 в 20:04. Причина: неправильно выложил код
Ответить с цитированием
  #2 (permalink)  
Старый 01.11.2017, 17:20
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 01.11.2017, 17:22
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Сообщение от алексей 111
разработчики сайта
Сообщение от алексей 111
if ($('.main-card__text').hasClass('open')) {
$('.main-card__text').removeClass('open');
$('.main-card__read').removeClass('open');
$('.main-card__read_1').removeClass('open');
} else {
$('.main-card__text').addClass('open');
$('.main-card__read').addClass('open');
$('.main-card__read_1').addClass('open');
}
Вы уверены, что они "разработчики"?

Портянку что выше можно заменить этой строкой:
$('.main-card__text,.main-card__read,.main-card__read_1').toggleClass('open');
Ответить с цитированием
  #4 (permalink)  
Старый 01.11.2017, 20:10
Новичок на форуме
Отправить личное сообщение для алексей 111 Посмотреть профиль Найти все сообщения от алексей 111
 
Регистрация: 01.11.2017
Сообщений: 5

они все-таки - разработчики, портянка - это мое изобретение, почитал умные сайты, сделал - как смог у них-то код коротенький (самый верхний)
как сократить портянку - понял
в один-то код это все объединить можно? (т.е. чтоб дополнительный '.main-card__read_1' и клик на него не создавать)
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2017, 10:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

алексей 111, под шапкой этого сайта есть ссылка "Поиск", нажмите на нее и поищите слово "открывашка". Найдете не одно решение своей задачи.
Ответить с цитированием
  #6 (permalink)  
Старый 04.11.2017, 16:55
Новичок на форуме
Отправить личное сообщение для алексей 111 Посмотреть профиль Найти все сообщения от алексей 111
 
Регистрация: 01.11.2017
Сообщений: 5

Почитал, из двух скриптов сделал один, полотно убрал:

$('.main-card__read').on('click', function(e) {
		if ($('.main-card__text').hasClass('open')) {
			$('.main-card__text').removeClass('open');
			$('.main-card__read').text('читать далее...')
		}	else {
			$('.main-card__text').addClass('open');
			$('.main-card__read').text('свернуть...')
		}
		e.preventDefault();
	});


как сюда дописать вариант для мобильных - не нашел...
т.е. для маленького размера экрана, к примеру меньше 766px - чтобы на открытие и закрытие срабатывало не по нажатии на ссылку: ('.main-card__read'), а по нажатию на сам блок: ('.main-card')
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2017, 08:34
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Ещё короче:
$('.main-card__read').on('click', function(e) {
		$('.main-card__read').text(
			$('.main-card__text').toggleClass('open').hasClass('open') ? 'свернуть...' : 'читать далее...'
		);
		e.preventDefault();
});
Ответить с цитированием
  #8 (permalink)  
Старый 07.11.2017, 16:45
Новичок на форуме
Отправить личное сообщение для алексей 111 Посмотреть профиль Найти все сообщения от алексей 111
 
Регистрация: 01.11.2017
Сообщений: 5

с сокращением разобрался, круто! спс!

этот скрипт работает при клике на ссылку.

если сделать:
$('.main-card').on('click', function(e) {
		$('.main-card__read').text(
			$('.main-card__text').toggleClass('open').hasClass('open') ? 'свернуть...' : 'читать далее...'
			);
		e.preventDefault();
	});

то срабатывает при клике на блок 'div'
можно ли сделать, чтобы по 'div' срабатывало только при
@media only screen and (max-width: 767px).
Т.е. на большом экране - $('.main-card__read'), а экран меньше 767 - $('.main-card')
Ответить с цитированием
  #9 (permalink)  
Старый 07.11.2017, 16:58
Новичок на форуме
Отправить личное сообщение для алексей 111 Посмотреть профиль Найти все сообщения от алексей 111
 
Регистрация: 01.11.2017
Сообщений: 5

т.е. как-нибудь добавить (вопрос куда ):
if (size < 767) {
$('.main-card').on('click', function(e)
......
}
Ответить с цитированием
  #10 (permalink)  
Старый 07.11.2017, 18:20
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

$('.main-card, .main-card__read').on('click', function(e) {
	if($(window).width() < 767 === $(this).is('.main-card')) {
		$('.main-card__read').text(
			$('.main-card__text').toggleClass('open').hasClass('open') ? 'свернуть...' : 'читать далее...'
		);
		e.preventDefault();
	}
});
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли сократить такую запись KonstantinK Элементы интерфейса 10 14.11.2011 21:50
Можно ли как-то сократить скрипт случайной цитаты (см. внутри)? Hyuga_Nia Общие вопросы Javascript 4 20.01.2011 22:00
Как можно сократить (и можно ли) этот скрипт (см. внутри)? Hyuga_Nia Общие вопросы Javascript 28 20.01.2011 21:48
Скрипт: можно ли обнаружить? Icy Общие вопросы Javascript 3 14.07.2010 15:25
Как изменить скрипт, что бы им его можно было использовать для нужной страницы Nick50_70 Общие вопросы Javascript 0 28.04.2009 23:30