Я использую Backbone вместе с require.js и jQuery. То, что я пытаюсь сделать, - просто привязать событие к контейнеру, который должен показывать (наведение мыши) или скрывать (mouseout) видео. Событие срабатывает, но, к сожалению, слишком много раз (у меня несколько детей внутри .intro-content
). Я пробовал использовать ev.stopPropagation()
(как видно из кода) и ev.stopImmediatePropagation
, но это не мешает пузыриться. Что я делаю не так?Магистральные события, срабатывающие несколько раз
Вид:
define([
'jquery',
'underscore',
'backbone',
'global'
], function($, _, Backbone, Global){
var VideoView = Backbone.View.extend({
el: $('#splitlayout'),
events: {
'mouseover .side-left .intro-content': 'checkVideoState',
'mouseout .side-left .intro-content': 'checkVideoState'
},
render: function(){
this.playVideo('video', '0GsrOOV0gQM');
this.delegateEvents();
},
initialize: function() {
_.bindAll(this);
this.render();
},
checkVideoState: function(ev) {
ev.stopPropagation();
if(!$('#video').hasClass('active') && ev.type == 'mouseover') {
this.showVideo();
} else if($('#video').hasClass('active') && ev.type == 'mouseout') {
this.hideVideo();
}
},
showVideo: function() {
console.log('test');
$('#video').addClass('active');
player.playVideo();
},
hideVideo: function() {
console.log('test');
$('#video').removeClass('active');
player.pauseVideo();
},
playVideo: function(container, videoId) {
var self = this;
if (typeof(YT) == 'undefined' || typeof(YT.Player) == 'undefined') {
window.onYouTubeIframeAPIReady = function() {
self.loadPlayer(container, videoId);
};
$.getScript('//www.youtube.com/iframe_api');
} else {
self.loadPlayer(container, videoId);
}
},
loadPlayer: function(container, videoId) {
player = new YT.Player(container, {
videoId: videoId,
playerVars: {
controls: 0,
loop: 1,
modestbranding: 0,
rel: 0,
showinfo: 0
},
events: {
'onReady': this.onPlayerReady
}
});
},
onPlayerReady: function() {
player.setPlaybackQuality('hd720');
player.seekTo(8,false);
player.pauseVideo();
}
});
return VideoView;
});
Спасибо за ответ, но MouseEnter и MouseLeave делать также сгореть события несколько раз .. – enyce12
@ enyce12 пожалуйста, убедитесь, что вы Бесполезный Не инициализируйте ваш взгляд дважды здесь, это пример двойных событий http://jsfiddle.net/rph4R/, вы можете исправить его с удалением последней строки 'new VideoView();'. Чтобы проверить это, вы можете добавить 'console.log ('initialize')' в метод 'initialize' и проверить консоль. –
@EugeneGlova Вот и все ... Я инициализировал его в Router и другом представлении. Спасибо! Не могли бы вы добавить этот намек на свой ответ? – enyce12