Javascript.RU

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

Поведение метода stop()
Есть блок и скрытый абзац. При щелчке по блоку абзац анимационно появляется. У анимации отображения есть метод stop со значениями 0,0(false, false). Но так же есть Условные операторы: if который не выполняется первый раз. В его теле тоже есть stop но, со значениями 1,1(true, true). Вопрос: почему даже если if не выполняется stop ведёт себя будто у него значение 1,1 ?
$(document).ready(function(){ 

$('.q1').click(function(){ 
if($(this).next().is(':visible')) // Это не выполняется т.к. Абзац ещё не виден
$(this).next().stop(true,true).slideUp(); // Это не выполняется т.к. Абзац ещё не виден

$(this).next().stop(0,0).slideToggle();//Так почему у stop ведёт себя будто у него значение true,true ?
}); 

});

<div class="q1"></div>
<p></p>
Ответить с цитированием
  #2 (permalink)  
Старый 08.02.2017, 20:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Метод .stop() останавливает выполнение текущей анимации, а вы что пытаетесь?
Ответить с цитированием
  #3 (permalink)  
Старый 08.02.2017, 20:19
Аспирант
Отправить личное сообщение для Aqua77 Посмотреть профиль Найти все сообщения от Aqua77
 
Регистрация: 18.01.2017
Сообщений: 40

Я знаю что делает этот метод. В вопросе собственно вопрос написан
Ответить с цитированием
  #4 (permalink)  
Старый 08.02.2017, 21:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Aqua77
Я знаю что делает этот метод.
Точно?

.stop(true,true) - актуально, если у объекта есть в очереди анимация, иначе не важно.
Следующий метод просто удаляет из очереди первую анимацию, не важно что там при этом, без параметров метод или 0,0

<html>
<head>
<style>
.foo {
   position: absolute;
   top: 10px;
   width: 30px;
   height: 30px;
   background: #000;
}
#b1 {
    left: 10px;
}
#b2 {
    left: 50px;
}
#b3 {
    left: 90px;
}
#b4 {
    left: 130px;
}
</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script> 
$(function() {
//#1
$('#b1').slideUp()
        .slideToggle();
//#2
$('#b2').slideUp()
        .slideToggle()
        .stop();   
//#3
$('#b3').slideUp()
        .slideToggle()
        .stop(0,0); 
//#4
$('#b4').slideUp()
        .slideToggle()
        .stop(1,1);   
});
</script> 
</head>
<body>
<div class="foo" id="b1"></div>
<div class="foo" id="b2"></div>
<div class="foo" id="b3"></div>
<div class="foo" id="b4"></div>
</body>
</html>


Есть разница между #2 и #3, и между #3 и #4? А чтобы понятней стало добавьте в #4 еще одну очередь.
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2017, 12:53
Аспирант
Отправить личное сообщение для Aqua77 Посмотреть профиль Найти все сообщения от Aqua77
 
Регистрация: 18.01.2017
Сообщений: 40

Последний нюанс. Просто почему stop работает как 0,0 если при двойном щелчке когда происходит значение в if и у stop там указан 1,1 ? https://jsfiddle.net/cpdg5kza/
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2017, 13:01
Аспирант
Отправить личное сообщение для Aqua77 Посмотреть профиль Найти все сообщения от Aqua77
 
Регистрация: 18.01.2017
Сообщений: 40

Всё понял. stop в теле if не срабатывает потому что, очереди уже нет из-за ранее сработавшим span с 0,0. Если так подтвердите
Ответить с цитированием
  #7 (permalink)  
Старый 09.02.2017, 15:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Вы можете пояснить нахрена вам метод с параметрами 0, 0, если это просто метод без параметров? А по условию будет выполняться только строка 05, никоим образом не распространяясь на строку 07. Что вы хотите получить от этого?

Не метод виноват а логика ваша, я ее лично не понимаю.

Последний раз редактировалось laimas, 09.02.2017 в 16:40.
Ответить с цитированием
  #8 (permalink)  
Старый 10.02.2017, 01:30
Аспирант
Отправить личное сообщение для Aqua77 Посмотреть профиль Найти все сообщения от Aqua77
 
Регистрация: 18.01.2017
Сообщений: 40

Сообщение от laimas Посмотреть сообщение
Не метод виноват а логика ваша, я ее лично не понимаю.
Вот как я вижу шаги программы:

Первое нажатие. if($('.q1').next().is(':visible')) не выполняется, а выполняется строка 8- $(this).next().stop(0,0).slideToggle() и блок начинает появляться.

Второе нажатие. Выполняется строка 3 $('.q1').next().stop(0,0) и происходит остановка анимации появления, и так как блок виден выполняется тело if($('.q1').next().is(':visible')) и блок начинает закрываться (а .stop(1,1) игнорируеться так как уже сработал $('.q1').next().stop(0,0) ).

https://jsfiddle.net/cpdg5kza/

Последний раз редактировалось Aqua77, 10.02.2017 в 01:34.
Ответить с цитированием
  #9 (permalink)  
Старый 10.02.2017, 04:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Aqua77
Вот как я вижу шаги программы
Все что вы видите забыть и прочитать хорошо о .slideToggle(), которому не нужно .is(':visible'), он сам проверяет, и этого метода одного хватит без прочего.
Ответить с цитированием
  #10 (permalink)  
Старый 10.02.2017, 09:47
Аспирант
Отправить личное сообщение для Aqua77 Посмотреть профиль Найти все сообщения от Aqua77
 
Регистрация: 18.01.2017
Сообщений: 40

Сообщение от laimas Посмотреть сообщение
Все что вы видите забыть и прочитать хорошо о .slideToggle(), которому не нужно .is(':visible'), он сам проверяет, и этого метода одного хватит без прочего.
Просто это один из фрагмента большого кода, и там необходим .is(':visible') - без него ни как. Я делаю аккордеон где много скрытых блоков, взаимодействия с одним просты - он открывается посредством slideToggle, но если нажать на другой блок то если кто-то открыт то его надо закрыть средством проверки .is(':visible') и slideUp https://jsfiddle.net/b3yLckrn/1/
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описание интерфейса метода с использованием тест-файла Mocha SergeyShatter Общие вопросы Javascript 1 24.01.2017 02:35
Непонятное поведение метода при добавлении во встроенный прототип Kapalak Общие вопросы Javascript 6 25.05.2014 11:39
Вызов метода из метода qwermjk Общие вопросы Javascript 25 16.10.2012 12:38
правильное применение метода stop() Harvey jQuery 11 04.06.2012 20:44
Проверка существования метода alex1covo Общие вопросы Javascript 6 27.03.2012 16:46