2015-03-18 2 views
0

здесь пьесы и паузы функции кнопкиJQuery на функции нажмите тумблер класса и функции

$('#control').on('click', function() { 
    var $this = $(this); 
    if ($this.hasClass('play')) { // on first click, detect by if hasClass 
     $this.removeClass('play').addClass('pause'); // maybe toggle class better 
     $play_function(); // but here a function... 
    } else { 
     $this.removeClass('pause').addClass('play'); // maybe toggle class better 
     $pause_function(); // but here a function too... 
    } 
    }); 

возможно переключение класса лучше, а функция ($ play_function() и $ pause_function()) внутри, мне нужно установить по умолчанию воспроизведение или пауза, поэтому установите if, если ... hasClass для обнаружения первого щелчка, может иметь простой способ переключения класса и функции с помощью if ($this.hasClass('play')) or if ($this.hasClass('pause'))? или другой метод выполняет эту функцию?

выше кода работы, но немного сложно, я хочу знать, какой-либо другой метод просто :)

Большое спасибо

+0

Этот вопрос, как представляется, не по теме, потому что она просит для проверки кода. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше было бы рассмотреть вопрос о том, как [Code Review Stack Exchange] (http://codereview.stackexchange.com/). – jww

+0

@ jww Code Review действительно было бы лучше спросить - но, пожалуйста, обратите внимание, что по теме в другом месте не задают вопрос вне темы здесь. –

+0

жаль, что я буду помнить в следующий раз :) спасибо вам :) – aboutjquery

ответ

1

Как вы сказали, я хотел бы попробовать функцию toggleClass:

$('#control').on('click', function() { 
    var $this = $(this); 
    $this.toggleClass("pause",function(){ 
     ($this.hasClass('pause')) ? pauseFunction():playFunction(); 
    }); 
}); 
+0

в моем коде, добавьте $ this.toggleClass ("pause play"), работайте отлично, спасибо огромное :) – aboutjquery

2

В HTML, добавьте атрибут добавления в качестве метки, как показано ниже

<button id="control" data-is-playing=0 ></button> 

В SCRI pt:

var callFuncs = new Array(); 
    callFuncs[0] = function playFunction() {};// call play when paused 
    callFuncs[1] = function pauseFunction() {}; 
    $('#control').on('click', function() { 
     var $this = $(this); 
     var stat = 1 - $this.attr("data-is-playing"); // maybe you can use = ! $this.attr("data-is-playing"), I'm not sure 
     $this.toggleClass('play'); // initially, there is no 'play' 
     $this.attr("data-is-playing", stat); 
     callFuncs[stat](); 
    }); 

, но решение CodeGodie кажется намного лучше с небольшой ошибкой!

$('#control').on('click', function() { 
    var $this = $(this); 
    $this.toggleClass("pause",function(){ 
    ($this.hasClass('pause')) ? pauseFunction():playFunction(); 
    }());// pay attention here 
}); 

Получайте удовольствие!

+0

спасибо за решение html data, я узнаю из этого ответа и о решении @CodeGodie, эффект add() есть? спасибо :) – aboutjquery

+1

В коде CodeGodie, pauseFunction или playFunction не вызывается при нажатии кнопки при проверке кода. После поиска http://api.jquery.com/toggleclass/, я думал, что он может означать вызов «.toggleClass (className, state)». Итак, пусть «state» будет возвращенным значением функции A, в котором мы называем pauseFunction или playFunction, я получил те функции, которые называются «toggle (className, A())». Но на самом деле A() возвращает «undefined», логика может быть «jQuery, кажется, опускает неопределенный параметр и только называется« .toggleClass (className) »« – danzeer

+0

@aboutjquery, используя jquery 1.11.1 – danzeer

1

Попробуйте

var controls = { 
 
    "play": function play(elem) { 
 
     $(elem).css("color", "red") 
 
    }, 
 

 
    "pause": function play(elem) { 
 
     $(elem).css("color", "green") 
 
    } 
 
}; 
 

 
$("#control").on("click", controls, function(e) { 
 
    return $(this).attr("class", function(i, c) { 
 
    return c === "play" ? "pause" : "play" 
 
    }) && controls[this.className](this) 
 
});
#control { 
 
    font-size:36px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<div id="control">click</div>

+0

еще раз спасибо :) больше информации я хочу знать, играть (elem), что такое смысл elem? thanks – aboutjquery

+1

@aboutjquery 'elem' является элементом' this' '# control', переданным' control.play', 'control.пауза' как 'аргумент'; хотя может передавать другой элемент или элемент без зависимости от ожидаемого возвращаемого значения 'control.play',' control.pause'. Используемый '# control' выше, поскольку никакой контекст или элемент не отображаются для' $ play_function() ',' $ plause_function() 'в OP. – guest271314

+0

приятно объяснить, спасибо – aboutjquery

Смежные вопросы