wecanrespondtochangesinourdocument'senvironmentwiththeaddListener()
method.TheaddListener()methodacceptsafunctionasitsargument.This
functionisalsoknownasacallbackfunction.
Let'saddaclassnamewhenourdocumententerslandscapeorientation.Thefirst
stepistocreateaMediaQueryListobjectusingmatchMediaandamediaquery:
var isLandscape = matchMedia("(orientation: landscape)");
Steptwoistodefineourcallbackfunction.OurMediaQueryListobjectwillbe
passedtothiscallbackfunctionatitssoleargument:
var toggleClass = function (mq) {
if (mq.matches) {
document.body.classList.add('widescreen');
} else {
document.body.classList.remove('widescreen');
}
}
Mediaqueryeventsarenotverysmart.They'refiredanytimethevalueofMedi-
aQueryList.matcheschanges,regardlessofwhethertheconditionistrue.This
meanswe'llneedtoexaminethevalueofMediaQueryList.matchesorMediaQueryL-
ist.mediaforourMediaQueryListobject.Inthiscase,ifthevalueofmq.matches
istrue,we'lladdaclassnametoourbodyelement.Otherwise,we'llremoveit.
Finally,let'saddthiseventlistenertoourMediaQueryListobjectwithaddListener:
isLandscape.addListener( toggleClass );
Toremovealistener,useremoveListenerasshown:
isLandscape.removeListener( toggleClass );
InearlyversionsoftheCSSOMViewspecification,addListenerandremoveListen-
erweresupposedtobeseparatemechanisms,removedfromtheDOMeventqueue.
ThishaschangedinLevel4.Eventually,we'llbeabletousethestandardaddEvent-
ListenerandremoveEventListenerDOMmethodstolistenforachangeevent.
Ourexamplesfrombeforecouldthenberewrittenlikeso:
298 CSS Master