Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/AnalogJ/matchmedia-ng
matchmedia wrapper for angularjs
https://github.com/AnalogJ/matchmedia-ng
angularjs javascript matchmedia responsive
Last synced: about 1 month ago
JSON representation
matchmedia wrapper for angularjs
- Host: GitHub
- URL: https://github.com/AnalogJ/matchmedia-ng
- Owner: AnalogJ
- License: mit
- Created: 2014-01-08T20:46:14.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2017-04-17T15:24:53.000Z (over 7 years ago)
- Last Synced: 2024-10-29T16:40:34.094Z (about 2 months ago)
- Topics: angularjs, javascript, matchmedia, responsive
- Language: JavaScript
- Homepage: http://analogj.github.io/matchmedia-ng/
- Size: 39.1 KB
- Stars: 136
- Watchers: 12
- Forks: 24
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
matchmedia-ng
============matchmedia-ng is a set of [AngularJS](http://angularjs.org/) bindings and helper functions for the [matchMedia javascript api](https://developer.mozilla.org/en-US/docs/Web/API/Window.matchMedia).
With matchMedia, AngularJS and matchmedia-ng you can automatically respond to the orientation, browser height, width and other properties supported by CSS Media Queries.matchmedia-ng provides two core methods `.is()` and `.on`.
`.on()` is syntactically similar to the angular `.$on()` method, providing a way to listen on media queries and respond.
`.is()` is just a simple alias for the `matchMedia().matches` method.Both `on()` and `is()` have aliases provided for the following common media queries:
- print - `print`
- screen - `screen`
- phone - `(max-width: 767px)`
- tablet - `(min-width: 768px) and (max-width: 979px)`
- desktop - `(min-width: 979px)`
- portrait - `(orientation: portrait)`
- landscape - `(orientation: landscape)`They can be used as `onPrint()`, `isPortrait()`, `onLandscape()` etc.
### Live Demo: AngularJS Media Query App.
Check out the `github-pages` branch for more the live demo code.
Install
-----bower install matchmedia-ng
Usage
-----
Include [angular.js](//ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js) and mediastore-ng.js in your application.
Optionally you can include the matchMedia polyfill if are worried about [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/API/Window.matchMedia#Browser_compatibility)```html
```
Add the module `matchmedia-ng` as a dependency to your app module:
```js
var myapp = angular.module('myapp', ['matchmedia-ng']);
```Quick Start
----------------------------------Set `matchmedia` as a service dependency in your controller:
```js
myapp.controller('MyCtrl', ['$scope', 'matchmedia',
function MyCtrl($scope, matchmedia) {
...
}
]);
```
If you would like to execute javascript code to load a higher resolution image when the page loads on a tablet rather than a mobile phone, you could do something like the following in your controller:```js
$scope.tablet = matchmedia.isTablet();
if($scope.tablet){
$scope.primaryImg = "images/[email protected]";
}```
If you would like to do something a bit more complicated, such as detect when the user drags the page below the threshold of a mobile phone, you can do something like this:
```js
var unregister = matchmedia.onPhone( function(mediaQueryList){
$scope.isPhone = mediaQueryList.matches;
});```
Or even execute javascript when the user attempts to print the page.
```js
var unregister = matchmedia.onPrint( function(mediaQueryList){
$scope.isPrint = mediaQueryList.matches;
//hide ads, show water mark, pause animations/video, etc.
});```
See the source for the
[controller behind the demo app](http://analogj.github.io/matchmedia-ng/index.html)
for a working example code.Custom Media Queries
-----------
Though the common media query aliases are helpful, in some cases you will want to execute javascript on very specific media queries (maybe in tandem with a specific css media query). In that case you can use the core `.on()` and `.is()` functions;__on()__
/**
* @param {string} query Media query to listen on.
* @param {function(mediaQueryList)} listener Function to call when the media query is matched.
* @param {$scope} $scope Optional AngularJS scope, if not provided will use $rootScope
* @returns {function()} Returns a deregistration function for this listener.
*/
matchmedia.on(query, listener, $scope)
matchmedia.on('tv and (min-width: 700px) and (orientation: landscape)', function(mediaQueryList){
console.log(mediaQueryList.matches);
})__is()__
/**
* @param {string} query media query to test.
* @returns {boolean} Returns true if the media query matches.
*/
matchmedia.is(query)var resp = matchmedia.is('(min-width: 700px), handheld and (orientation: landscape)');
Aliases & Shortcuts
-----------
The following is a comprehensive list of the media query aliases.
matchmedia.onPrint(listener, $scope)
matchmedia.onScreen(listener, $scope)
matchmedia.onPhone(listener, $scope)
matchmedia.onTablet(listener, $scope
matchmedia.onDesktop(listener, $scope)
matchmedia.onPortrait(listener, $scope)
matchmedia.onLandscape(listener, $scope)matchmedia.isPrint()
matchmedia.isScreen()
matchmedia.isPhone()
matchmedia.isTablet()
matchmedia.isDesktop()
matchmedia.isPortrait()
matchmedia.isLandscape()### Override Aliases
It is possible to override the media queries given for the aliases above by using a `config` function.```js
angular.module('myapp', ['matchmedia-ng']).config(['matchmediaProvider', function (matchmediaProvider) {
matchmediaProvider.rules.phone = "(max-width: 500px)";
matchmediaProvider.rules.desktop = "(max-width: 1500px)";
}]);```
Logging
-----------
You can enable logging by using the following snippet in your code.```js
.config(['loggerProvider',function(loggerProvider){
loggerProvider.setDEVMODE(true);
}])
```
TODO
-----------
- Add more documentaton regarding the matchmedia queries. (full options list).
- Example with polyfill.
- Tests for the matchmedia-ng framework are coming shortly.Pull Requests
-----------
To make a pull request, please do the following:Mention what specific version matchmedia-ng.js you were using when you encountered the issue/added the feature. This can be accessed by looking at the matchmedia-ng.js file header.
Provide a pastie or gist that demonstrates the bug/feature
Do not modify the version header. I will modify that manually when merging the requestLicense
-------
Copyright (c) 2013 Jason Kulatunga, released under the [MIT license](http://analogj.mit-license.org/)