有效解决 css sprite 图片使用 rem 单位边角缺失的问题

起因


在移动端使用 rem 布局时 sprite 图片也需要用 rem 单位。
但由于浏览器对小数单位精度解析的差异,在不同设备上一些图片看起来会缺了一点点,或者多了一点点..

有哪些方案?

  1. 【百分比 background-position】
    既然不能写固定单位,那么用百分比应该可以吧?
    其实上面的截图正是用的百分比,网络上见到大多数也有提到这个方法,但博主的实践来看,并没有效果,或许是哪里没做好..
  2. 【提高数值精度】
    浏览器没办法精确的处理小数,那么提高数值精度就好了吧。
    例如原本 23.12456rem ,提高 100 倍, 写成 2312.456rem 这样浏览器解析就会准确多了。

更多

javascript正确匹配换行符

根据文档匹配换行符的方式应该是\r\n,实测却无效,原因是换行符在各系统下的匹配都是不一致的。

  • windows \r 匹配换行
  • *unix \r\n 匹配换行
  • mac \n 匹配换行

所以最终的写法应该是\r\n|\r|\n

P.S:截图是我常用的匹配工具,找到几款在线的正则匹配都无法高亮换行和溢出,顺手修复BUG还联系不上作者就先放到的自己的空间了。

http://think2011.net/regex-tester/

体验异步的终极解决方案-ES7的Async/Await

阅读本文前,期待您对promise和ES6(ECMA2015)有所了解,会更容易理解。
本文以体验为主,不会深入说明,结尾有详细的文章引用。

第一个例子

Async/Await应该是目前最简单的异步方案了,首先来看个例子。

这里我们要实现一个暂停功能,输入N毫秒,则停顿N毫秒后才继续往下执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var sleep = function (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, time);
})
};

var start = async function () {
// 在这里使用起来就像同步代码那样直观
console.log('start');
await sleep(3000);
console.log('end');
};

start();

控制台先输出start,稍等3秒后,输出了end

基本规则

  1. async 表示这是一个async函数await只能用在这个函数里面

  2. await 表示在这里等待promise返回结果了,再继续执行。

  3. await 后面跟着的应该是一个promise对象(当然,其他返回值也没关系,只是会立即执行,不过那样就没有意义了..)

更多

ES6(ECMAScript 6)笔记8-函数的扩展

函数参数的默认值

允许为函数的参数设置默认值,即直接写在参数定义的后面。

1
2
3
4
5
6
7
function log(x, y = 'World') {
console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

可以为一个对象属性设置默认值

1
2
3
fetch(url, { body = '', method = 'GET', headers = {} }){
console.log(method);
}

甚至可以设置双重默认值,调用函数fetch时,如果不含第二个参数,则默认值为一个空对象;如果包含第二个参数,则它的method属性默认值为GET。

1
2
3
fetch(url, { method = 'GET' } = {}){
console.log(method);
}

如果传入undefined,将触发该参数等于默认值,null则没有这个效果。

1
2
3
4
5
6
function foo(x = 5, y = 6){
console.log(x,y);
}

foo(undefined, null)
// 5 null

更多

ES6(ECMAScript 6)笔记7-对象的扩展

属性的简洁表示法

允许直接写入变量和函数作为对象的属性和方法,这样的书写更简洁。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function f( x, y ) {
return { x, y };
}

// 等同于

function f( x, y ) {
return { x: x, y: y };
}

var o = {
method() {
return "Hello!";
}
};

// 等同于

var o = {
method: function() {
return "Hello!";
}
};
install
var Person = {

name: '张三',

//等同于birth: birth
birth,

// 等同于hello: function ()...
hello() { console.log('我的名字是', this.name); }

};

更多

ES6(ECMAScript 6)笔记6-数组的扩展

Array.from()

将类数组和可遍历的对象转换为真正的数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let ps = document.querySelectorAll('p');

Array.from(ps).forEach(function (p) {
console.log(p);
});

function foo() {
var args = Array.from( arguments );
}

foo( "a", "b", "c" );

Array.from({ 0: "a", 1: "b", 2: "c", length: 3 });
// [ "a", "b" , "c" ]

同时接受第二个参数,作用类似于map方法,对每个元素进行处理。

更多