Fullcalendar mousewheel event prev next

0

Я пытаюсь сделать простой мысли в Fullcalendar (1.6.2) и должен имитировать предыдущую и следующую кнопку через колесико мыши вверх и вниз, подобно календарю Google.

Вот код, который я использую, этот код из другого вопроса здесь, я думаю, но я не могу вспомнить, какой именно: S

calendar.bind('mousewheel', function(event, delta) {

var view =  calendar.fullCalendar('getView');
//alert(view.name); //Can retrieve the view name successfully 
//alert(delta); // Undefined
//alert(event); // [Object object]

if (view.name == "month") {
                if (delta > 0) {
                alert(delta);  
                calendar.fullCalendar('prev'); 
            }
            if (delta < 0) { 
                alert(delta);
                calendar.fullCalendar('next'); 
            }
            return false;
}

});

Проблема: delta is Undefined

Кто-нибудь знает, что я делаю неправильно? Я очень новичок в Jquery или Javascript

РЕДАКТИРОВАТЬ

var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel";
// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = [37, 38, 39, 40];

function preventDefault(e) {
  e = e || window.event;
  if (e.preventDefault)
  e.preventDefault();
  e.returnValue = false;  
}

function keydown(e) 
{
    for (var i = keys.length; i--;) {
      if (e.keyCode === keys[i]) {
          preventDefault(e);
          return;
       }
   }
 } 

  function wheel(e) {
    preventDefault(e);
  }

  function disable_scroll() 
  {
    if (window.addEventListener) {
       window.addEventListener('DOMMouseScroll', wheel, false);
   }
    window.onmousewheel = document.onmousewheel = wheel;
     document.onkeydown = keydown;
  }

  function enable_scroll() 
  {
     if (window.removeEventListener) {
         window.removeEventListener('DOMMouseScroll', wheel, false);
    }  
    window.onmousewheel = document.onmousewheel = document.onkeydown = null;  
  }


  calendar.bind(mousewheelevt, function(e) 
  {
   var evt=window.event || e;
   var delta=evt.detail ? evt.detail*(-120) : evt.wheelDelta;

    if(delta > 0){   
      calendar.fullCalendar('next');        
    }
    if(delta < 0){              
      calendar.fullCalendar('prev');        
    }        
   });

    calendar.bind("mouseleave", function() 
    {
     enable_scroll();
    });

   calendar.bind("mouseenter", function() 
   {
     disable_scroll();
    });

Большая часть этого кода была скопирована из сети, я просто адаптирую ее к своей проблеме.

Это работает в Chrome (последняя версия) и IE (последняя версия). Не работает в Firefox (последняя версия)

Не проверял старые версии любого из них.

Может ли кто-нибудь увидеть проблему отсутствия работы в FF?

Теги:
fullcalendar
mousewheel

1 ответ

1
Лучший ответ

Я думаю, что у меня это получилось, его немного взломало, но это трюк !!! Любые конструктивные критики приветствуются. Это теперь работает в последних версиях IE, Firefox, Chrome.

//This checks the browser in use and populates da var accordingly with the browser
var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel";

//Prevents the scroll event for the windows so you cant scroll the window       
function preventDefault(e) {
  e = e || window.event;
  if (e.preventDefault)
      e.preventDefault();
  e.returnValue = false;  
}       

//I think this could be eliminated but in the examples i found used it  
function wheel(e) {
  preventDefault(e);        
}
//adds the scroll event to the window       
function disable_scroll(){
    if (document.attachEvent) //if IE (and Opera depending on user setting)
        document.attachEvent("on"+mousewheelevt, wheel);
    else if (document.addEventListener) //WC3 browsers
        document.addEventListener(mousewheelevt, wheel, false);                 
}   

//removes the scroll event to the window    
function enable_scroll() 
{
    if (document.removeEvent) //if IE (and Opera depending on user setting)
        document.removeEvent("on"+mousewheelevt, wheel);
    else if (document.removeEventListener) //WC3 browsers
        document.removeEventListener(mousewheelevt, wheel, false);  
}           

//binds the scroll event to the calendar DIV you have made    
calendar.bind(mousewheelevt, function(e){
    var evt = window.event || e; //window.event para Chrome e IE || 'e' para FF
    var delta;          
    delta = evt.detail ? evt.detail*(-120) : evt.wheelDelta;                    
    if(mousewheelevt === "DOMMouseScroll"){
        delta = evt.originalEvent.detail ? evt.originalEvent.detail*(-120) : evt.wheelDelta;
    }           

 if(delta > 0){  
    calendar.fullCalendar('next');      
     }
     if(delta < 0){             
        calendar.fullCalendar('prev');      
     }  

});

//hover event to disable or enable the window scroll    
calendar.hover(
    function(){
        enable_scroll();
        console.log("mouseEnter");
    },
    function(){
        disable_scroll();
        console.log("mouseLeave");
    }
);

//binds to the calendar div the mouseleave event      
calendar.bind("mouseleave", function() 
{
     enable_scroll();
});

//binds to the calendar div the mouseenter event   
calendar.bind("mouseenter", function() 
{
     disable_scroll();
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню