Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Blocking mouse wheel in browser when mouse over screen

Discussion in 'Scripting' started by Russian Madman, Dec 24, 2009.

  1. Russian Madman

    Russian Madman

    Joined:
    Apr 20, 2009
    Posts:
    29
    Code (csharp):
    1.  
    2. if("Mouse in screen")
    3. Application.Call("disableWheel")
    4. else
    5. Application.Call("enableWheel")
    6.  
    7.  
    8. //Add this javscript to the web page
    9.  
    10.  
    11. function disableWheel() {
    12.     /* Gecko */
    13.     addHandler(window, 'DOMMouseScroll', wheel);
    14.     /* Opera */
    15.     addHandler(window, 'mousewheel', wheel);
    16.     /* IE */
    17.     addHandler(document, 'mousewheel', wheel);
    18. }
    19.  
    20. function enableWheel() {
    21.     /* Gecko */
    22.     removeHandler(window, 'DOMMouseScroll', wheel);
    23.     /* Opera */
    24.     removeHandler(window, 'mousewheel', wheel);
    25.     /* IE */
    26.     removeHandler(document, 'mousewheel', wheel);
    27. }
    28.  
    29. //function for add envent handler
    30. function addHandler(object, event, handler, useCapture) {
    31.     if (object.addEventListener) {
    32.         object.addEventListener(event, handler, useCapture ? useCapture : false);
    33.     } else if (object.attachEvent) {
    34.         object.attachEvent('on' + event, handler);
    35.     } else alert("Add handler is not supported");
    36. }
    37.  
    38. //function for remove envent handler
    39. function removeHandler(object, event, handler) {
    40.     if (object.removeEventListener) {
    41.         object.removeEventListener(event, handler, false);
    42.     } else if (object.detachEvent) {
    43.         object.detachEvent('on' + event, handler);
    44.     } else alert("Remove handler is not supported");
    45. }
    46.  
    47. // Wheel event handler
    48. function wheel(event) {
    49.     var delta; // Scroll direction
    50.     // -1 - scroll down
    51.     // 1  - scroll up
    52.     event = event || window.event;
    53.     // Opera  IE works with property wheelDelta
    54.     if (event.wheelDelta) {
    55.         delta = event.wheelDelta / 120;
    56.         // In Опере value of wheelDelta the same but with opposite sign
    57.         if (window.opera) delta = -delta;
    58.         // Gecko uses property detail
    59.     } else if (event.detail) {
    60.         delta = -event.detail / 3;
    61.     }
    62.     // Disables processing events
    63.     if (event.preventDefault) event.preventDefault();
    64.     event.returnValue = false;
    65.     return delta;
    66. }
    67.  
     
  2. chchrist

    chchrist

    Joined:
    Oct 31, 2009
    Posts:
    5
    Great Script!!

    I think though that it is Application.ExternalCall()

    How do you detect when the mouse is on Screen?

    I've detect with making a new Rect(0,0,Screen.width,Screen.height) and then
    use the Contains(Input.mousePosition) but I wonder if there is an easier way...
     
  3. 3dever

    3dever

    Joined:
    Mar 2, 2009
    Posts:
    71
    Ou! Thank you for this solution, it's really needfull :)
     
  4. xavierlepretre

    xavierlepretre

    Joined:
    Jul 14, 2011
    Posts:
    1
    Building on Russian Madman code I made this one that you just need to run once, is Javascript only, and does not require any call from the Unity player:

    Code (csharp):
    1. // Call this after your unityObject.embedUnity (...) command
    2. disableBrowserWheelUnity ();
    3.  
    4. // Functions
    5. // Disable wheel function when mouse is over Unity div
    6. function disableBrowserWheelUnity () {
    7.     var myUnity = document.getElementById ( 'unityPlayer' ); // Replace with the id of the div containing your player
    8.     if ( myUnity === undefined || myUnity === null ) {
    9.         // Come back later if embed not ready yet
    10.         setTimeout ( disableBrowserWheelUnity, 2000 );
    11.         return;
    12.     }
    13.     /* Gecko */
    14.     addHandler ( myUnity, 'DOMMouseScroll', wheel );
    15.     /* Opera and IE? Not tested for IE */
    16.     addHandler ( myUnity, 'mousewheel', wheel );
    17. }
    18.  
    19. / /function to add event handler
    20. function addHandler ( object, event, handler, useCapture ) {
    21.     if ( object.addEventListener ) {
    22.         object.addEventListener ( event, handler, useCapture ? useCapture : false );
    23.     } else if ( object.attachEvent ) {
    24.         object.attachEvent ( 'on' + event, handler );
    25.     } else alert ( "Add handler is not supported" );
    26. }
    27.  
    28. // Wheel event handler
    29. function wheel ( event ) {
    30.     var delta; // Scroll direction
    31.     // -1 - scroll down
    32.     // 1  - scroll up
    33.     event = event || window.event;
    34.     // Opera  IE works with property wheelDelta
    35.     if (event.wheelDelta) {
    36.         delta = event.wheelDelta / 120;
    37.         // In value of wheelDelta the same but with opposite sign
    38.         if ( window.opera ) delta = -delta;
    39.         // Gecko uses property detail
    40.     } else if ( event.detail ) {
    41.         delta = -event.detail / 3;
    42.     }
    43.     // Disables processing events
    44.     if ( event.preventDefault ) event.preventDefault ();
    45.     event.returnValue = false;
    46.     return delta;
    47. }