Событие canplay
является сложным, оно может воспроизводиться более одного раза, например, при изменении текущего времени браузер должен загрузить больше данных из кэша или сети.Это может вызвать событие canplay.
Чтобы решить его, есть два пути.
One - как сказано выше, ответ на вопрос - использовать флаг.Я не поддерживаю это, поскольку смешивание с флагами может усложнить ваш код и усложнить его чтение и сопровождение.
Второй - это отмена подписки на событие:
video.bind('canplay', function (ev) {
// your logic ....
video.unbind('canplay')
}
Начиная с jquery 3.0 и далее :
video.on('canplay', function (ev) {
// your logic ....
video.off('canplay')
}
Приведенный выше код чище, его легче читать и обслуживать.
В конце концов,вам решать, что лучше всего подходит вам здесь.