Javascript.RU

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

hamburger и ripple
Всем привет, подскажите пожалуйста как сделать так что бы при нажатии на ripple(пульсация) так же запускалась анимация гамбургера? То есть когда я нажимаю на гамбургер анимация и ripple срабатывают, но когда я нажимаю на ripple анимация ripple срабатывает но анимация гамбургера нет)
Как бы эти 2 кода объеденить?
/*Анимация гамбургера*/
$(function () {
    
    $('.hamburger').on('click', function() {
        $(this).find('.hamburger--line').toggleClass('hamburger--line__x');
    });
    
});

/*Анимация нажатия*/
$(document).on('click', '.ripple', function(e) {
 
    var $ripple = $('<span class="rippling" />'),
    $button = $(this),
    btnOffset = $button.offset(),
    xPos = e.pageX - btnOffset.left,
    yPos = e.pageY - btnOffset.top,
    size = 1,
    animateSize = parseInt(Math.max($button.innerWidth(), $button.innerHeight()) * Math.PI);
 
    $ripple.css({
        top: yPos,
        left: xPos,
        width: size,
        height: size,
        backgroundColor: $button.attr("ripple-color"),
        opacity: $button.attr("ripple-opacity")
    })
    .appendTo($button)
    .animate({
        width: animateSize,
        height: animateSize,
        // transform: 'scale(' + animateSize + ')',
        opacity: 0
      }, 500, function() {
        $(this).remove();
      });
});


на 1-ом изображении я нажимаю рядом с гамбургером, ripple срабатывает но гамбургер не анимирует
на 2-ом изображении я нажимаю на гамбургер
Изображения:
Тип файла: png Безымянный1.png (5.9 Кб, 11 просмотров)
Тип файла: png Безымянный2.png (3.9 Кб, 11 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2017, 09:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

GTRka, нужно вызвать событие, к которому привязана анимация, ease же.
/*Анимация гамбургера*/
$(function () {

    $('.hamburger').on('click', function(e) {
        if(!e.isTrigger)//если вызвано не скриптом
            $('.ripple').click();

        $(this).find('.hamburger--line').toggleClass('hamburger--line__x');
    });
    
});

С .ripple тоже самое нужно сделать, только кликать на гамбургере.
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2017, 10:19
Новичок на форуме
Отправить личное сообщение для GTRka Посмотреть профиль Найти все сообщения от GTRka
 
Регистрация: 07.08.2017
Сообщений: 7

Nexus,
Сделал вот так, теперь при нажатии на гамбургер он не анимирует, но если нажать рядом с гамбургером(ripple),гамбургер анимирует.
А нужно что бы куда бы я не нажал , на ripple или же на гамбургер была анимация обоих компонентов.
P.S. я не особо силен в этом, я только учусь)
/*Анимация гамбургера*/
$(function () {
    
    $('.hamburger').on('click', function(e) {
    	if(!e.isTrigger) //если вызвано не скриптом
        $('.ripple').click();
        $(this).find('.hamburger--line').toggleClass('hamburger--line__x');
    });
    
});
/*Анимация нажатия*/
$(document).on('click', '.ripple', function(e) {

	if(!e.isTrigger) //если вызвано не скриптом
        $('.hamburger').click();

	var $ripple = $('<span class="rippling" />'),
	$button = $(this),
	btnOffset = $button.offset(),
	xPos = e.pageX - btnOffset.left,
	yPos = e.pageY - btnOffset.top,
	size = 1,
	animateSize = parseInt(Math.max($button.innerWidth(), $button.innerHeight()) * Math.PI);

	$ripple.css({
		top: yPos,
		left: xPos,
		width: size,
		height: size,
		backgroundColor: $button.attr("ripple-color"),
		opacity: $button.attr("ripple-opacity")
	})
	.appendTo($button)
	.animate({
		width: animateSize,
		height: animateSize,
        // transform: 'scale(' + animateSize + ')',
        opacity: 0
      }, 500, function() {
      	$(this).remove();
      });
});
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2017, 11:14
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

GTRka,
http://api.jquery.com/trigger/
- если не разберётесь, то приведите html-код, желательно с рабочим параметром run: https://javascript.ru/formatting
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2017, 11:49
Новичок на форуме
Отправить личное сообщение для GTRka Посмотреть профиль Найти все сообщения от GTRka
 
Регистрация: 07.08.2017
Сообщений: 7

Белый шум,
С параметром ран не получается((
вот html
<div class="flex_hero">
	<div class="flex-left">
		<div class="btn-round ripple menu">
			<div class="hamburger">
				<div class="hamburger--line"></div>
			</div>
		</div>
	</div>
</div>
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2017, 12:17
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Сообщение от GTRka Посмотреть сообщение
Белый шум,
С параметром ран не получается((
Добавил e.stopPropagation(); и console.log(); в оба обработчика - судя по консоли, отрабатывают оба. А что там у вас с анимацией - смотрите код анимации.

<html><body>
<script src="//code.jquery.com/jquery-latest.min.js"></script>
<div class="flex_hero">
	<div class="flex-left">
		<div class="btn-round ripple menu" style="width:300px;height:100px;background-color:red;">
			<div class="hamburger">
				<div class="hamburger--line" style="width:200px;height:10px;background-color:yellow;"></div>
			</div>
		</div>
	</div>
</div>

<script>
/*Анимация гамбургера*/
$(function () {
     
    $('.hamburger').on('click', function(e) {
e.stopPropagation();
        if(!e.isTrigger) //если вызвано не скриптом
        $('.ripple').click();

console.log('нажат гамбургер');
        $(this).find('.hamburger--line').toggleClass('hamburger--line__x');
    });
     
});
/*Анимация нажатия*/
$(document).on('click', '.ripple', function(e) {
 e.stopPropagation();
    if(!e.isTrigger) //если вызвано не скриптом
        $('.hamburger').click();
console.log('нажат риппл');

    var $ripple = $('<span class="rippling" />'),
    $button = $(this),
    btnOffset = $button.offset(),
    xPos = e.pageX - btnOffset.left,
    yPos = e.pageY - btnOffset.top,
    size = 1,
    animateSize = parseInt(Math.max($button.innerWidth(), $button.innerHeight()) * Math.PI);
 
    $ripple.css({
        top: yPos,
        left: xPos,
        width: size,
        height: size,
        backgroundColor: $button.attr("ripple-color"),
        opacity: $button.attr("ripple-opacity")
    })
    .appendTo($button)
    .animate({
        width: animateSize,
        height: animateSize,
        // transform: 'scale(' + animateSize + ')',
        opacity: 0
      }, 500, function() {
        $(this).remove();
      });
});
</script>
</body></html>
Ответить с цитированием
Ответ



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

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