动漫片之支付宝价格拖动选用,它们是如何是好

日期:2019-11-22编辑作者:美高梅老虎机平台

打赏支持作者翻译更加多好文章,感谢!

任选风华正茂种支付格局

图片 1 图片 2

1 赞 2 收藏 评论

更目不暇接的例子

为了再练习一下,大家在来看二个比较复杂的例子:

var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x); console.log(b.x);

1
2
3
4
5
var a = {n: 1};  
var b = a;
a.x = a = {n: 2};  
console.log(a.x);
console.log(b.x);

遵循初阶的定论大家能够一步步的来看这么些难题:

var a = {n: 1}; // 引用a指向内部存款和储蓄器1{n:1} var b = a; // 援引b => a => { n:1 }

1
2
var a = {n: 1};   // 引用a指向内存1{n:1}
var b = a;        // 引用b => a => { n:1 }

内部结构:

| Addr | 内容 | |---------|-------------| | a | 内存1 {n:1} | | b | 内存1 |

1
2
3
4
|   Addr  |     内容     |
|---------|-------------|
|    a    |  内存1 {n:1} |
|    b    |  内存1       |

三番五次往下看:

a.x = a = {n: 2}; // (内存1 而不是 a ).x = 引用 a = 内存2 {n:2}

1
a.x = a = {n: 2};  //  (内存1 而不是 a ).x = 引用 a = 内存2 {n:2}

a 固然是援引,不过 JavaScript 是值传的那个援引,所以被改进不影响原来的地方。

| Addr | 内容 | |-----------|-----------------------| | 1) a | 内存2({n:2}) | | 2) 内存1.x | 内存2({n:2}) | | 3) b | 内存1({n:1, x:内存2}) |

1
2
3
4
5
|    Addr   |          内容         |
|-----------|-----------------------|
| 1) a     |  内存2({n:2})         |
| 2) 内存1.x |  内存2({n:2})         |
| 3) b     |  内存1({n:1, x:内存2}) |

因此最后的结果

  • a.x 即(内存2).x ==> {n: 2}.x ==> undefined
  • b.x 即(内存1).x ==> 内存2 ==> {n: 2}

难点根源

作者们依照作品最先始提议的步骤,逐步逐个审查,会发觉在首先步的时候,svg 中的图片就不显得了。也正是,当 image 成分的 src 为二个 svg,况且 svg 里面满含图表,那么被含有的图片是不会来得的,纵然这些图片是本域的。

W3C 关于这些难点并从未 做表达,最终在  找到了关于这么些题指标表达。 意思是:制止这么做是出于安全思索,svg 里面引用的具备 表面财富 包含image, stylesheet, script 等都会被拦住。

里头还举了贰个例子:借使未有这么些范围,如若一个论坛允许客商上传这样的 svg 作为头像,就有希望现身那样的情景,一人黑客上传 svg 作为头像,里面包含代码:<image xlink:href="http://evilhacker.com/myimage.png">(借使那位骇客具备对于 evil黑客.com 的调整权卡塔 尔(阿拉伯语:قطر‎,那么那位黑客就全盘能成功下边的职业:

  • 纵然有人查看他的资料,evil红客.com 就能收下到三次 ping 的乞求(进而能够获得查看者的 ip卡塔 尔(英语:State of Qatar);
  • 可以产生对于不一样的 ip 地址的人出示不生机勃勃致的头像;
  • 能够每十五日转变头像的外观(而不用经过论坛管理员的稽核卡塔 尔(阿拉伯语:قطر‎。

总的来看此间,大概就精晓了整整难题的开始和结果了,当然还应该有少数原因可能是避免图像递归。

4.金额呈现

率先,扩展三个input输入框,然后拿走它。

图片 3

 

这里安装了输入框的最小值为标尺的微小额度,这里能够先不用管它。大家器重看onMouseMove函数

图片 4注意money的总结值,它为(centerX - rule.x)*rule.ratioScale(centerX - rule.x)正如好驾驭,因为,我们的标尺是从canvas的中央点绘制的。但rule.ratioScale在最开头的构造函数中并从未定义。这里须求在构造函数中加上,它的意思是每像素代表某个钱,能够感觉是图表比例尺。

this.ratioScale = Math.floor(this.max / this.width) //比列尺

1
this.ratioScale = Math.floor(this.max / this.width) //比列尺

那正是说自然,移动间隔乘以比例尺就得出钱数了。大家看看效果。

图片 5

留意到上边的意义中金额展现现身了负数,所以大家需求对移动范围做约束。让其只可以在节制的最大和纤维金额之间活动。

2. demo说明

正文开篇给出的职能,对应的页面是index.html,关于这一个职能还应该有三个难题亟需证实:

1卡塔 尔(英语:State of Qatar)它用了前头这篇博客利用轮播原理结合hammer.js达成简洁的滑屏成效介绍的滑屏思路,并把它的有些逻辑包装在了swipe.js,对外提供了四个全局变量Swipe,这么些模块有几个init的措施,以便外部通过调用Swipe.init()就会伊始化滑屏相关的职能,原本未有提供那个init方法,在js加载实现就能够初阶化滑屏成效,有了这么些init方法就可以把滑屏的逻辑延迟到加载实现的时候去伊始化。index.html生机勃勃共援用了5个js:

<script src="js/zepto.js"></script> <script src="js/transition.js"></script> <script src="js/hammer.js"></script> <script src="js/imgLoader.js"></script> <script src="js/swipe.js"></script>

1
2
3
4
5
<script src="js/zepto.js"></script>
<script src="js/transition.js"></script>
<script src="js/hammer.js"></script>
<script src="js/imgLoader.js"></script>
<script src="js/swipe.js"></script>

内部imgLoader.js就是前方介绍图片加载器的兑现,前四个js都以为最后三个swipe.js服务的,感兴趣的能够接二连三笔者的博客利用轮播原理结合hammer.js达成简洁的滑屏效用摸底相关内容。可是滑屏不是本文的重中之重,不明白swipe.js不会潜移暗化领悟本文的内容~

2卡塔尔国固然自个儿在demo中用到了3张比超大的图纸,不过出于在该地景况,加载速度如故拾叁分快,所以风流洒脱初步的时候,很可耻到预加载的成效,最终只可以想方法在各种进程回调早前做一下延迟,这才方可观察眼前gif图片一伊始的丰富loading效果,实现格局是:

//模拟加载慢的效果 var callbacks = []; imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) { var i = callbacks.length; callbacks.push(function(){ setTimeout(function(){ var percentT = percentage * 100; $('#loader__info').html('Loading ' + (parseInt(percentT)) + '%'); $('#loader__progress')[0].style.width = percentT + '%'; if (percentage == 1) { setTimeout(function(){ $('#loader').remove(); Swipe.init(); }, 600); } callbacks[i + 1] & callbacks[i + 1](); },600); }); if(percentage == 1) { callbacks[0](); } });

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//模拟加载慢的效果
var callbacks = [];
imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) {
    var i = callbacks.length;
    callbacks.push(function(){
        setTimeout(function(){
            var percentT = percentage * 100;
            $('#loader__info').html('Loading ' + (parseInt(percentT)) + '%');
            $('#loader__progress')[0].style.width = percentT + '%';
            if (percentage == 1) {
                setTimeout(function(){
                    $('#loader').remove();
                    Swipe.init();
                }, 600);
            }
            callbacks[i + 1] & callbacks[i + 1]();
        },600);
    });
 
    if(percentage == 1) {
        callbacks[0]();
    }
});

在实况,最棒依旧不要特意去加这种延迟,没须求为了让客商观望二个窘迫有趣的加载效果,就浪费它无需的等候时间,所以实际情况还是应当用上边包车型地铁代码:

imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) { var percentT = percentage * 100; $('#loader__info').html('Loading ' + (parseInt(percentT)) + '%'); $('#loader__progress')[0].style.width = percentT + '%'; if (percentage == 1) { $('#loader').remove(); Swipe.init(); } });

1
2
3
4
5
6
7
8
9
imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) {
    var percentT = percentage * 100;
    $('#loader__info').html('Loading ' + (parseInt(percentT)) + '%');
    $('#loader__progress')[0].style.width = percentT + '%';
    if (percentage == 1) {
        $('#loader').remove();
        Swipe.init();
    }
});

如何是 CSS 层叠上下文,它们是什么样行事的?

2016/02/24 · CSS · 层叠上下文

本文由 伯乐在线 - EricHedgedog 翻译,JustinWu 校稿。未经许可,防止转发!
立陶宛共和国(Republic of Lithuania卡塔 尔(阿拉伯语:قطر‎语出处:Tiffany B. Brown。款待参加翻译组。

CSS层叠上下文给广大开采者都拉动过忧虑。在本人写完《CSS Master》中的布局章节以前,小编都不可能说本人早就完全明白了它们。当然了,笔者通晓成分的 z-index 属性是急需 position 属性不为 static 时技艺见到成效的,但那也是在自个儿读了好数次Philip Walton 的《未有人告知您至于 Z-Index 的有的事》之后才了解了。

尚未触犯 Philip 的情趣。就像本人说过的:层叠上下文很伤脑筋。

那怎么是层叠上下文呢?层叠上下文正是三个包涵了意气风发组堆放层的成分。这能够是三个html 成分创建的根层叠上下文,只怕是二个由特定属性和值创制的部分层叠上下文。

“蕴涵一堆层”是三个很想获得的短语,但这是一个差不离的定义。在叁个局地层叠上下文中,子成分的z-index 会依照其父成分来设置并非文书档案的根成分。在该上下文以外的层(举例:三个局域层叠上下文的左近同级成分卡塔 尔(英语:State of Qatar)不能够放在个中间层之间。

当时是三个例证。使用切换按键来为 A 成分触发只怕撤废二个局域层叠上下文。

图片 6

图片 7

在此个事例中,#a p 成分(A的子成分) 的z-index为1 ,#a 元素和 #b 元素的z-index值为auto 。因为 #a p 成分的 z-index 属性值为正数,所以在根层叠上下文内该因素位于 #a 元素和 #b 成分之上。

然而把 #a 元素的 transform 属性值由 none 改为 scale(1) 会触发二个局域层叠上下文。以后 #a p 成分的 z-index 值会依照 #a 成分来测算实际不是文书档案的根成分。

任凭根层叠上下文照旧局域层叠上下文都会据守一美妙绝伦的规行矩步来鲜明因素的堆积和制图顺序,贰个层叠上下文的子成分会依据从下到上的逐大器晚成绘制。

  1. 堆积层级为负数的要素,平常为 z-index:-1 的元素 。
  2. position 属性值为 static 的要素。
  3. 堆集层级为 0 的要素,平日为 z-index:auto 的要素。
  4. 积聚层级为正数的要素,举例 z-index 属性值为 1 要么越来越大的元素。

借使三个因素有同等的积聚层级,就依据它们在源文件中冒出的逐个层叠。后继成分堆积在四驱成分之上。

个其他 CSS 属性和值会触发四个新的层叠上下文。它们包含: opacity 属性,当它的属性值小于 1 时(举例:.99);
filter 属性,当它的属性值不为 none 时;CSS 混合形式属性 mix-blend-mode, 当它的品质值不为 normal 时。

和您猜猜的千篇一律,transform 属性能够接触八个层叠上下文,可是仅当它的质量值不为 none 时。那包含了身份调换[1] ,比如属性值为 scale(1) 和 translate3d(0,0,0) 。

在上述例子中,#a 元素和 #b 成分具备近似的堆放层级,可是 #动漫片之支付宝价格拖动选用,它们是如何是好事的。b 成分是源文件中的第三个成分。当 transform: scale(1) 被使用时, #a p 变为带有在 #a 成分的某些上下文中。结果是,#b 成分上升到了储藏室的最上面。

[1] 身份转变对成分未有视觉上的震慑,然而会接触贰个新的层叠上下文。

打赏补助笔者翻译更加的多好小说,谢谢!

打赏译者

在 Node.js 中看 JavaScript 的引用

2017/05/05 · JavaScript · NodeJS

原稿出处: lellansin   

开始年代学习 Node.js 的时候 (二零一一-二零一三),有挺多是从 PHP 转过来的,那个时候有意气风发对人对于 Node.js 编辑完代码须求重启一下意味着麻烦(PHP无需那几个进度卡塔尔,于是社区里的相爱的人就从头发起使用 node-supervisor 这几个模块来运转项目,能够编写完代码之后自动重启。不过相对于 PHP 来说照旧非常不足方便,因为 Node.js 在重启今后,此前的上下文都有失了。

就算能够经过将 session 数据保存在数据库恐怕缓存中来缩短重启进度中的数据遗失,但是假若是在临盆的图景下,更新代码的重启间隙是无语管理恳求的(PHP可以,此外非常时候 Node.js 尚未曾 cluster卡塔尔。由于那上边的标题,加上自己是从 PHP 转到 Node.js 的,于是从当年最初商量,有未有一些子能够在不重启的事态下热更新 Node.js 的代码。

最最早把目光瞄向了 require 这几个模块。主张相当粗略,因为 Node.js 中引进二个模块都以经过 require 那个措施加载的。于是就开始构思 require 能或不能够在更新代码之后再一次 require 一下。尝试如下:

a.js

var express = require('express'); var b = require('./b.js'); var app = express(); app.get('/', function (req, res) { b = require('./b.js'); res.send(b.num); }); app.listen(3000);

1
2
3
4
5
6
7
8
9
10
11
var express = require('express');
var b = require('./b.js');
 
var app = express();
 
app.get('/', function (req, res) {
  b = require('./b.js');
  res.send(b.num);
});
 
app.listen(3000);

b.js

exports.num = 1024;

1
exports.num = 1024;

多少个 JS 文件写好现在,从 a.js 运行,刷新页面会输出 b.js 中的 1024,然后修正 b.js 文件中导出的值,譬如更正为 2048。再一次刷新页面依旧是原先的 1024。

再次施行三次 require 并不曾刷新代码。require 在施行的进度中加载完代码之后会把模块导出的数额放在 require.cache 中。require.cache 是三个 { } 对象,以模块的相对路线为 key,该模块的详尽数据为 value。于是便初始做如下尝试:

a.js

var path = require('path'); var express = require('express'); var b = require('./b.js'); var app = express(); app.get('/', function (req, res) { if (true) { // 检查文件是或不是校订 flush(); } res.send(b.num); }); function flush() { delete require.cache[path.join(__dirname, './b.js')]; b = require('./b.js'); } app.listen(3000);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var path = require('path');
var express = require('express');
var b = require('./b.js');
 
var app = express();
 
app.get('/', function (req, res) {
  if (true) { // 检查文件是否修改
    flush();
  }
  res.send(b.num);
});
 
function flush() {
  delete require.cache[path.join(__dirname, './b.js')];
  b = require('./b.js');
}
 
app.listen(3000);

重新 require 以前,将 require 之上关于该模块的 cache 清理掉后,用事先的点子重新测量检验。结果开采,能够成功的刷新 b.js 的代码,输出新改善的值。

询问到这么些点后,就想经过该原理实现一个无重启热更新版本的 node-supervisor。在包装模块的经过中,出于情怀的从头到尾的经过,思虑提供三个像样 PHP 中 include 的函数来顶替 require 去引进一个模块。实际内部依旧是使用 require 去加载。以b.js为例,原本的写法改为 var b = include(‘./b’),在文书 b.js 更新之后 include 内部能够自行刷新,让外部获得最新的代码。

不过其实的付出进程中,这样急忙就超越了难点。大家期望的代码恐怕是如此:

web.js

var include = require('./include'); var express = require('express'); var b = include('./b.js'); var app = express(); app.get('/', function (req, res) { res.send(b.num); }); app.listen(3000);

1
2
3
4
5
6
7
8
9
10
var include = require('./include');
var express = require('express');
var b = include('./b.js');
var app = express();
 
app.get('/', function (req, res) {
  res.send(b.num);
});
 
app.listen(3000);

但根据那么些指标封装include的时候,我们发掘了难题。无论我们在include.js内部中如何兑现,都不能够像开头那样拿到新的 b.num。

对待起来的代码,我们发现难题出在少了 b = xx。也正是说那样写才足以:

web.js

var include = require('./include'); var express = require('express'); var app = express(); app.get('/', function (req, res) { var b = include('./b.js'); res.send(b.num); }); app.listen(3000);

1
2
3
4
5
6
7
8
9
10
var include = require('./include');
var express = require('express');
var app = express();
 
app.get('/', function (req, res) {
  var b = include('./b.js');
  res.send(b.num);
});
 
app.listen(3000);

改过成这么,就可以保障每趟能得以精确的刷新到最新的代码,并且不要重启实例了。读者风乐趣的可以研讨这么些include是怎么落到实处的,本文就不浓重斟酌了,因为那个手艺使耗费不高,写起起来不是很华贵[1],反而那其间有贰个更关键的难题——JavaScript的援引。

消除办法

思路:由于安全因素,其实首先步的时候,图片已经展示不出去了。那么大家现在虚构的情势是在首先步之后遍历 svg 的构造,将具备的 image 成分的 url、地点和尺寸保存下去。在第三步之后,按梯次贴到 canvas 上。那样,最终导出的 png 图片就能够有 svg 里面包车型大巴 image。关键代码

JavaScript

// 此处略去变通 svg url 的长河 var svgUrl = DomUEvoqueL.createObjectU汉兰达L(blob); var svgWidth = document.querySelector('#kity_svg').getAttribute('width'); var svgHeight = document.querySelector('#kity_svg').getAttribute('height'); var embededImages = document.querySelectorAll('#kity_svg image'); // 由 nodeList 转为 array embededImages = Array.prototype.slice.call(embededImages); // 加载底层的图 loadImage(svgUrl).then(function(img) { var canvas = document.createElement('canvas'), ctx = canvas.getContext("2d"); canvas.width = svgWidth; canvas.height = svgHeight; ctx.drawImage(img, 0, 0); // 遍历 svg 里面全体的 image 元素embededImages.reduce(function(sequence, svgImg){ return sequence.then(function() { var url = svgImg.getAttribute('xlink:href') + 'abc', dX = svgImg.getAttribute('x'), dY = svgImg.getAttribute('y'), dWidth = svgImg.getAttribute('width'), dHeight = svgImg.getAttribute('height'); return loadImage(url).then(function( sImg) { ctx.drawImage(sImg, 0, 0, sImg.width, sImg.height, dX, dY, dWidth, dHeight); }, function(err) { console.log(err); }); }, function(err) { console.log(err); }); }, Promise.resolve()).then(function() { // 策画在前端下载 var a = document.createElement("a"); a.download = 'download.png'; a.href = canvas.toDataU中华VL("image/png"); var clickEvent = new Mouse伊芙nt("click", { "view": window, "bubbles": true, "cancelable": false }); a.dispatchEvent(clickEvent); }); }, function(err) { console.log(err); }) // 省略了 loadImage 函数 // 代码和率先个例子同样

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// 此处略去生成 svg url 的过程
var svgUrl = DomURL.createObjectURL(blob);
var svgWidth = document.querySelector('#kity_svg').getAttribute('width');
var svgHeight = document.querySelector('#kity_svg').getAttribute('height');
 
var embededImages = document.querySelectorAll('#kity_svg image');
// 由 nodeList 转为 array
embededImages = Array.prototype.slice.call(embededImages);
// 加载底层的图
loadImage(svgUrl).then(function(img) {
 
var canvas = document.createElement('canvas'),
ctx = canvas.getContext("2d");
 
canvas.width = svgWidth;
canvas.height = svgHeight;
 
ctx.drawImage(img, 0, 0);
    // 遍历 svg 里面所有的 image 元素
    embededImages.reduce(function(sequence, svgImg){
 
        return sequence.then(function() {
            var url = svgImg.getAttribute('xlink:href') + 'abc',
                dX = svgImg.getAttribute('x'),
                dY = svgImg.getAttribute('y'),
                dWidth = svgImg.getAttribute('width'),
                dHeight = svgImg.getAttribute('height');
 
            return loadImage(url).then(function( sImg) {
                ctx.drawImage(sImg, 0, 0, sImg.width, sImg.height, dX, dY, dWidth, dHeight);
            }, function(err) {
                console.log(err);
            });
        }, function(err) {
            console.log(err);
        });
    }, Promise.resolve()).then(function() {
        // 准备在前端下载
        var a = document.createElement("a");
        a.download = 'download.png';
        a.href = canvas.toDataURL("image/png");
 
        var clickEvent = new MouseEvent("click", {
            "view": window,
            "bubbles": true,
            "cancelable": false
        });
 
        a.dispatchEvent(clickEvent);
 
        });
 
      }, function(err) {
        console.log(err);
   })
 
   // 省略了 loadImage 函数
   // 代码和第一个例子相同

说明

  1. 事例中 svg 里面包车型客车图像是根节点上边包车型大巴,由此用于表示地点的 x, y 直接取来就能够使用,在实际上中,那几个职务只怕需求跟其余质量做一些运算之后得出。假诺是依靠svg 库营造的,那么能够向来使用Curry面用于固定的函数,比直接从底部运算越发有帮助和可信赖。
  2. 小编们这里研商的是本域的图纸的导出难点,跨域的图纸由于「污染了」画布,在执行 toDataUrl 函数的时候会报错。

2.标尺绘制

a) 绘制标尺刻度部分
图片 8图片 9
此处有个截图错误,应该是i+=this.miniPxStep。那应当轻巧掌握,就是每隔miniPxStep制图叁次线段,线段的门类依照n那么些变量来规定。

b) 绘制标尺文字部分

图片 10

文字的绘图无法以真实的荧屏像素为准,必需映射到金额上,所以,这里绘制的数字是(n/10)* this.step。同有时候,还做了多少个非常的拍卖,正是开端值是1,不是0。因为,大家的金额不容许输入0元。若是你无需那个,把这里注释掉就ok了。

c) 绘制后面部分横线

图片 11

d) 绘制标定轴

图片 12

诸有此类任何标尺就成功了,rule.js文件在最上部的github中。今后大家调用一下这一个文件,看看画出来的意义怎样。

图片 13

那边大家设置了最大数额度为100000元,最小额度为500元。整个标尺的尺寸为5000px,步长step为1000元。效果图如下:

图片 14

让标尺偏移个200px, 比如设置: x: ruleX - 200, 效果如下:

图片 15

设置步长step为500,效果如下:

图片 16

ok,今后静态标尺就绘制实现,下一步将在瓜熟蒂落人机联作成效,让标尺能够跟随鼠标滚动,何况出示当前拖动的金额。

3. 注意事项

预加载是意气风发种相比较普及的落时效果与利益,但是在选拔的时候,有些标题亟需注意:

1卡塔 尔(英语:State of Qatar)什么日期用

页面大的时候用,日常页面大小抢先3M就该构思采纳;页面内满含数据量相当大的图形,在手提式有线电话机端测量试验能够显然看见加载缓慢的时候,能够思考动用。

2卡塔尔尽量利用sprite图片

3卡塔尔加载效果贯彻的时候,尽量不用图片,就算要用也理应用非常的小的图片,不然加载效果卡在这里就平素不意思了。

本文由澳门美高梅老虎机平台发布于美高梅老虎机平台,转载请注明出处:动漫片之支付宝价格拖动选用,它们是如何是好

关键词:

Javascript图片预加载精解,的交互作用式大巴线路

兑现相似Pinterest 的图纸预加载功效 2016/09/11 · JavaScript· 预加载 原稿出处: JackPu    谈起Pinterest,我们第朝气蓬勃印...

详细>>

css属性的选取对动漫片质量的震慑,记二次换行

为啥要去 hack? 在事情费用进度中,往往会借助一些 Node.js 模块,hack 那么些 Node.js模块的入眼指标是在不更改工具源...

详细>>

调剂景况,有线页面动漫优化实例

无线页面动漫优化实例 2016/04/20 · CSS ·无线 初藳出处:大额_skylar(@大数额大数额哼歌等日落卡塔 尔(英语:State ...

详细>>

变动CSS世界驰骋准则的writing,标签与搜索引擎优

知道CSS3 isolation: isolate的显现和功效 2016/01/10 · CSS ·isolate 初稿出处:张鑫旭    意气风发部分小个性 为了让H5的表现...

详细>>