- From: Jonathan Fielding <jonthanfielding@gmail.com>
- Date: Tue, 11 Feb 2014 09:21:58 +0000
- To: www-style@w3.org
- Message-ID: <52F9EBB6.8050105@gmail.com>
Hi all I have been looking at the CSSOM View Module specification, in particular I have been doing a lot of research into the window.matchMedia API and I would like to suggest a potential extension to the API. At the moment we can create a mediaQueryList and add a listener, which will fire when the media query is matched or unmatched. A limitation however is that we cannot add individual resize methods to each of the media queries, I tried to handle this limitation as part of my js library SimpleStateManager (www.simplestatemanager.com <http://www.simplestatemanager.com/>) which is currently built on top of the resize method however soon we will be migrating it to use the matchMedia API, but will need to to retain the resize method for handling the resize events. With the current API's available in the browser, to have a different resize method for each of the mediaQueryLists we need to add an on resize event. var mqlSmall = window.matchMedia("screen and (max-width: 767px)"); var mqlMedium = window.matchMedia("screen and (min-width: 768px) and (max-width: 991px)"); var mqlLarge = window.matchMedia("screen and (min-width: 992px)");window.addEventListener("resize", function(){ if(mqlSmall.matches){ console.log('resize small device'); } else if(mqlMedium.matches){ console.log('resize medium device'); } else if(mqlLarge.matches){ console.log('resize large device'); }}, true); The above example is very simple, as we would need to add a debounce on to the resize event, and add method calls instead of calling the console.log. My suggestion is to extend the addListener method so this will look more like var mqlSmall = window.matchMedia("screen and (max-width: 767px)"); var mqlMedium = window.matchMedia("screen and (min-width: 768px) and (max-width: 991px)"); var mqlLarge = window.matchMedia("screen and (min-width: 992px)"); mqlSmall.addListener('resize', function(){ console.log('resize small device'); }); mqlMedium.addListener('resize', function(){ console.log('resize medium device'); }); mqlLarge.addListener('resize', function(){ console.log('resize large device'); }); The benefit being the browser could take away the need for this logic in our javascript, and this could potentially offer performance benefits as the browsers can optimise how this is implemented. I hope this email makes sense, I would love to discuss peoples thoughts on this an whether this could make it into the specification. Thanks Jonathan
Received on Tuesday, 11 February 2014 09:25:48 UTC