MxWeiXinPF.Web/obj/Release/Package/PackageTmp/shop/templates/haier/js/matchMedia.js
(开头部分) 3KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
/**
* @file 媒体查询
* @import zepto.js
* @module GMU
*/
(function ($) {
/**
* 是原生的window.matchMedia方法的polyfill,对于不支持matchMedia的方法系统和浏览器,按照[w3c window.matchMedia](http://www.w3.org/TR/cssom-view/#dom-window-matchmedia)的接口
* 定义,对matchMedia方法进行了封装。原理是用css media query及transitionEnd事件来完成的。在页面中插入media query样式及元素,当query条件满足时改变该元素样式,同时这个样式是transition作用的属性,
* 满足条件后即会触发transitionEnd,由此创建MediaQueryList的事件监听。由于transition的duration time为0.001ms,故若直接使用MediaQueryList对象的matches去判断当前是否与query匹配,会有部分延迟,
* 建议注册addListener的方式去监听query的改变。$.matchMedia的详细实现原理及采用该方法实现的转屏统一解决方案详见
* [GMU Pages: 转屏解决方案($.matchMedia)](https://github.com/gmuteam/GMU/wiki/%E8%BD%AC%E5%B1%8F%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88$.matchMedia)
*
* 返回值MediaQueryList对象包含的属性<br />
* - ***matches*** 是否满足query<br />
* - ***query*** 查询的css query,类似\'screen and (orientation: portrait)\'<br />
* - ***addListener*** 添加MediaQueryList对象监听器,接收回调函数,回调参数为MediaQueryList对象<br />
* - ***removeListener*** 移除MediaQueryList对象监听器<br />
*
*
* @method $.matchMedia
* @grammar $.matchMedia(query) ⇒ MediaQueryList
* @param {String} query 查询的css query,类似\'screen and (orientation: portrait)\'
* @return {Object} MediaQueryList
* @example
* $.matchMedia('screen and (orientation: portrait)').addListener(fn);
*/
$.matchMedia = (function() {
var mediaId = 0,
cls = 'gmu-media-detect',
transitionEnd = $.fx.transitionEnd,
cssPrefix = $.fx.cssPrefix,
$style = $('<style></style>').append('.' + cls + '{' + cssPrefix + 'transition: width 0.001ms; width: 0; position: absolute; clip: rect(1px, 1px, 1px, 1px);}\n').appendTo('head');
return function (query) {
var id = cls + mediaId++,
$mediaElem,
listeners = [],
ret;
$style.append('@media ' + query + ' { #' + id + ' { width: 1px; } }\n') ; //原生matchMedia也需要添加对应的@media才能生效
// 统一用模拟的,时机更好。
// if ('matchMedia' in window) {
// return window.matchMedia(query);
// }
$mediaElem = $('<div class="' + cls + '" id="' + id + '"></div>')
.appendTo('body')
.on(transitionEnd, function() {
ret.matches = $mediaElem.width() === 1;
$.each(listeners, function (i,fn) {
$.isFunction(fn) && fn.call(ret, ret);
});
});
ret = {
matches: $mediaElem.width() === 1 ,
后面还有 16 行代码,购买后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
