I'm using the mediaelement.js jQuery plugin HTML5 player. The player is used in the background of the page so that all menus are above the player. This works perfectly on Firefox, Chrome, OSX Safari and Opera. On iPad Safari, the menus still appear above the video in a z-indez position layered div, but I can't actually click on the menus.
Any idea or suggestion?
I'm having the same problem as lonchbox.
On mobile devices I have a anchor with position:fixed on the bottom right corner, that opens up a div on the click event. On any area of the website the click event works normally, but if I try to click on it while above the player, the click doesn't work.
The pointer-events:none solution is not the case since the player is not capturing the wrong intent of the click, and the click event of the player is working correctly.
I'm guessing it's a z-index problem - on a quick debug via the safari web inspector, deleting the player div makes everything alright. But changing the position to absolute and setting up a high z-index (on both the anchor and the player div, also on the player div's parents) didn't made a difference.
So the menu you want to click on, that shows above the media element doesn't work? There is a CSS property that you can set on the element you don't want receiving clicks, its called pointer-events.
So for your player you could have a rule like this:
.thePlayer {
ponter-events:none;
}
when that rule is set, it can no longer receive click events. You probably don't want the rule to apply all the time, so use some javascript to set it only when the dropdown is activated.
Related
I'm using Unity 3D's new UI system to build a pause menu for my game. Currently I'm trying to have my buttons respond to mouse clicks. Some of my hierarchy is as follows:
When I click on one of my buttons in-game nothing happens, this includes a lack of button animation that should occur when hovering. My "Main Canvas" gameobject contains the following components:
I have already ensured that my Image component has "Raycast target" checked and that my Button component has "Interactable" checked.
Could this be because my Canvas' render mode is in screen space (camera)? I need the render mode to be set to this because I have 3D models that are added in front of the UI during gameplay.
Things I have already tried / checked:
Ensured that an EventSystem was present
Checked that another UI element wasn't covering the buttons, preventing a raycast
Ensured that the camera rendering the UI is above my main camera that is attached to the player. The rendering UI camera has a layer of 1 while the player camera has a layer of 0.
Your EventSystem GameObject is missing the Standalone Input Module Script component.
Select your EventSystem->Add Component ->Standalone Input Module. Done!
The gif below decsribes two ways to do that.
If anyone here ever runs into this problem and none of these fixes work, go to Edit > project settings > Input, then in the inspector tab click the little gear icon in the top right corner and click Reset. this should fix all your buttons!
Ensured that EventSystem component is present in the hierarchy. Without EventSystem unity is not able to track any events that's occurring in the particular scene
Try to change short order in canvas. Maybe the button canvas is blocked by another canvas.
If anyone here ever runs into this problem and none of these fixes work:
Chose your button in Hierarchy -> Find "Canvas" in Inspector -> Delete IT(Remove component)!
If you´re using the InputSystemPackage go to Edit > ProjectSettings > Input System Package. And in supported devices make sure there´s a Mouse option, if not, press the + button below and add the mouse device.
If you are pausing the game by setting the timescale to 0, then no input will work if the update mode of the input system is set to process events in Fixed Update, since the fixed update is not run at zero timescale - you can change the update mode in Edit > ProjectSettings > Input System Package.
Input settings screenshot
For me it was because the button was covered by other components in the Canvas. I changged put the button in the very front whithin the campus, and it works now
Please check for the "EventSystem" to be present in Hierarchy to make button working.
refer the attachment for it
I had this same problem in Unity v2020.3.24f1, and after trying all suggestions to no avail I noticed in my case the Graphic Ray-casting was un-checked. Just in case somebody tried everything and is still facing this issue, make sure it is ticked in the canvas element!.
Had a similar issue, my event system already had the Standalone Input Module attached and I apparently followed the warning and replaced it with Input System UI Input Module which broke mouse events. Adding the standalone Input module back isn't enough, the other input module must be disabled or removed. So try using the Standalone Input Module exclusively in your event system.
I am building a site that has a header with a fixed position which contains a select menu. The header is supposed to stay locked to the top of the screen due to the position:fixed in css. However, when clicking the select menu in mobile safari on iphone, the header no longer stays locked to the top when the ios select menu opens. It seems that ios is centering the div with the select menu onto the visible area of the screen above the menu. This doesn't happen when the page is scrolled to the top, but when the address bar is not visible, it "breaks" like so. Haven't found any other answers, maybe I'm asking the question the wrong way. I can't post links to code yet, any help is appreciated.
http://selfconstruc.tv/menu-open.PNG
http://selfconstruc.tv/menu-closed.PNG
For now I don't think there is a perfect solution to deal with the focus jumping.
In my case I hide the header on focus in and show again in focus out and it works well.
I don't know if in your case this could be a workaround.
You can try this:
// detect ios device
if(navigator.userAgent.match(/(iPad|iPhone|iPod)/gi)){
// hide header on focus in and show on focus out
jQuery("#content").focusin(function(){
jQuery('#your-header-id').hide();
})
jQuery("#content").focusout(function(){
jQuery('your-header-id').show();
})
}
The #content is a div where you should have all your controls, the jQuery .focusin() detects the focus event on parent elements, so every control will trigger the focus event. You hide the header on focus and show after that. Hope this helps!
I have a Canvas element, and a FlowPanel on top of it (in z order). When I click on the FlowPanel, it seems to intercept the click and stops propagating it. I don't have any click listeners set on it though. I want the canvas below it to receive the click event.
Is there a way to get the FlowPanel to ignore the click and let it propagate to the canvas that sits below it?
Thanks
In Chrome, Firefox and Safari 4+ you can use the pointer-events CSS property (it's also well-supported by mobile browsers), but for other browsers (IE, Opera and older Safaris) you'll have to listen to click events at the FlowPanel level and fire synthetic click events on the canvas.
Assuming the FlowPanel and the canvas are aligned, at the same position, you should be able to use DomEvent.fireNativeEvent coupled with Document.get().createClickEvent.
On this site : mecanomedic.com, the menu template work fine in "normal" desktop browser, but dont slide down on ipad-iphone device. What can be the problem ?
Some tell me it's a css problem, but HOW safari desktop work ?
The problem is that the menu expansion relies on the user hovering with a mouse. On touch devices like iPads & iPhones, the hovering gesture can't be replicated because there's only one input- touch. If I were you, I'd take a look at Twitter's Bootstrap menu setup and perhaps use media queries to serve up a different menu on smaller screen sizes.
Here's an example of a Bootstrap navigation bar in action (you'll have to inspect the code to see how it works).
Add a href to the top-level <a>'s so that they can be focusable:
Produits
Elements that are focusable receive mouse events and hover styles when the user taps on them.
As #Matt stated, the problem is that your menu relies on a hover event and unfortunately that event is unavailable on touch screen devices.
One way to fix this would be to:
Check if the current user's device is an iOS device
If the device is an iOS device, use javascript to trigger a menu item's "show event" when the menu button is CLICKED instead of ROLLED OVER / HOVERED.
This would result in the menu being shown when the user taps a menu button.
There's an issue when accessing my website (http://www.zero11arquitetura.com.br) on iPad or iPhone with iOS 5 that I can´t fix. When window is scrolled thru code every position:fixed elements click event stop working. Can you please help me ?
This site structure uses a top menu div and a header div with position: fixed css. When user clicks on a menu item window scrolls horizontally until it reaches its target.
Clicking in the menu item is done by jQuery click method on each img tag and scrolling is done by jQuery animate method ($("html:not(:animated),body").animate({ scrollLeft: varDestino }, 1500);)
When page is loaded the menu works just as I intended but, after it scrolls thru menu, and I try to click on another menu item nothing happens. The strangest thing is that everything works again when user manually scrolls the window (by finger).
It looks like that by changing window scroll position by code (jQuery calls window.scroll) fixed elements lost its clickable position references.
Is there any workaround for this ?
Thanks,
I've solved this with a trick. I've created invisible divs over the menu items that changes it's position when page scrolls (simulating afixed element over the real position: fixed menu items). When user clicks or hover over those invisble divs the real ones are called