├── .gitignore ├── README.md ├── assets └── screenshot.png ├── dist ├── index-min.js ├── lib │ ├── tinycolor-min.js │ ├── zepto.min.js │ └── zrender.min.js └── lipstick.json ├── gulpfile.js ├── index.html ├── package-lock.json ├── package.json └── src ├── index.js └── lipstick.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 口红颜色可视化 2 | 3 | 为什么你的女神总缺一支口红? 4 | 5 | 因为口红居然有这么多颜色![去看看!](http://zhangwenli.com/lipstick/) 6 | 7 | ![截图](assets/screenshot.png) 8 | -------------------------------------------------------------------------------- /assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ovilia/lipstick/e8b60673f6534679032336dfdd1016dc03b401aa/assets/screenshot.png -------------------------------------------------------------------------------- /dist/index-min.js: -------------------------------------------------------------------------------- 1 | var zr=null,bgDpi=.2,zrDpi=1,width=0,height=0,lipstickData=null;function init(){width=Math.floor(window.innerWidth*bgDpi),height=Math.floor(window.innerHeight*bgDpi);var t=document.getElementById("bg");t.setAttribute("width",width),t.setAttribute("height",height);var e=document.getElementById("zr");e.setAttribute("width",window.innerWidth*zrDpi),e.setAttribute("height",window.innerHeight*zrDpi),zr=zrender.init(e),$.getJSON("dist/lipstick.json",function(e){updateLipstickData(e);var i=getMinMax(lipstickData);renderBackground(t,i),renderDataPoints(lipstickData,i),hover({target:lipstickData[0].group.childAt(0)}),updateUi(lipstickData[0]),document.getElementById("ui").setAttribute("style","display:block")})}function updateLipstickData(t){lipstickData=[];for(var e=0,i=t.brands.length;e220)){l>i&&(i=l),lr&&(r=s),s-1?(relate(n.group),notNormalGroups.push(n.group)):downplay(n.group))}lastEmphasisGroup=t.target.parent}}else if(lastEmphasisGroup){for(r=0;r.5?i/(2-f-g):i/(f+g),f){case a:d=(b-c)/i+(c>b?6:0);break;case b:d=(c-a)/i+2;break;case c:d=(a-b)/i+4}d/=6}return{h:d,s:e,l:h}}function f(a,b,c){function d(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+6*(b-a)*(2/3-c):a}var e,f,g;if(a=A(a,360),b=A(b,100),c=A(c,100),0===b)e=f=g=c;else{var h=.5>c?c*(1+b):c+b-c*b,i=2*c-h;e=d(i,h,a+1/3),f=d(i,h,a),g=d(i,h,a-1/3)}return{r:255*e,g:255*f,b:255*g}}function g(a,b,c){a=A(a,255),b=A(b,255),c=A(c,255);var d,e,f=R(a,b,c),g=Q(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(c>b?6:0);break;case b:d=(c-a)/i+2;break;case c:d=(a-b)/i+4}d/=6}return{h:d,s:e,v:h}}function h(b,c,d){b=6*A(b,360),c=A(c,100),d=A(d,100);var e=a.floor(b),f=b-e,g=d*(1-c),h=d*(1-f*c),i=d*(1-(1-f)*c),j=e%6,k=[d,h,g,g,i,d][j],l=[i,d,d,h,g,g][j],m=[g,g,i,d,d,h][j];return{r:255*k,g:255*l,b:255*m}}function i(a,b,c,d){var e=[F(P(a).toString(16)),F(P(b).toString(16)),F(P(c).toString(16))];return d&&e[0].charAt(0)==e[0].charAt(1)&&e[1].charAt(0)==e[1].charAt(1)&&e[2].charAt(0)==e[2].charAt(1)?e[0].charAt(0)+e[1].charAt(0)+e[2].charAt(0):e.join("")}function j(a,b,c,d,e){var f=[F(P(a).toString(16)),F(P(b).toString(16)),F(P(c).toString(16)),F(H(d))];return e&&f[0].charAt(0)==f[0].charAt(1)&&f[1].charAt(0)==f[1].charAt(1)&&f[2].charAt(0)==f[2].charAt(1)&&f[3].charAt(0)==f[3].charAt(1)?f[0].charAt(0)+f[1].charAt(0)+f[2].charAt(0)+f[3].charAt(0):f.join("")}function k(a,b,c,d){var e=[F(H(d)),F(P(a).toString(16)),F(P(b).toString(16)),F(P(c).toString(16))];return e.join("")}function l(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s-=c/100,d.s=B(d.s),b(d)}function m(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s+=c/100,d.s=B(d.s),b(d)}function n(a){return b(a).desaturate(100)}function o(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l+=c/100,d.l=B(d.l),b(d)}function p(a,c){c=0===c?0:c||10;var d=b(a).toRgb();return d.r=R(0,Q(255,d.r-P(255*-(c/100)))),d.g=R(0,Q(255,d.g-P(255*-(c/100)))),d.b=R(0,Q(255,d.b-P(255*-(c/100)))),b(d)}function q(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l-=c/100,d.l=B(d.l),b(d)}function r(a,c){var d=b(a).toHsl(),e=(d.h+c)%360;return d.h=0>e?360+e:e,b(d)}function s(a){var c=b(a).toHsl();return c.h=(c.h+180)%360,b(c)}function t(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+120)%360,s:c.s,l:c.l}),b({h:(d+240)%360,s:c.s,l:c.l})]}function u(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+90)%360,s:c.s,l:c.l}),b({h:(d+180)%360,s:c.s,l:c.l}),b({h:(d+270)%360,s:c.s,l:c.l})]}function v(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+72)%360,s:c.s,l:c.l}),b({h:(d+216)%360,s:c.s,l:c.l})]}function w(a,c,d){c=c||6,d=d||30;var e=b(a).toHsl(),f=360/d,g=[b(a)];for(e.h=(e.h-(f*c>>1)+720)%360;--c;)e.h=(e.h+f)%360,g.push(b(e));return g}function x(a,c){c=c||6;for(var d=b(a).toHsv(),e=d.h,f=d.s,g=d.v,h=[],i=1/c;c--;)h.push(b({h:e,s:f,v:g})),g=(g+i)%1;return h}function y(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[a[c]]=c);return b}function z(a){return a=parseFloat(a),(isNaN(a)||0>a||a>1)&&(a=1),a}function A(b,c){D(b)&&(b="100%");var d=E(b);return b=Q(c,R(0,parseFloat(b))),d&&(b=parseInt(b*c,10)/100),a.abs(b-c)<1e-6?1:b%c/parseFloat(c)}function B(a){return Q(1,R(0,a))}function C(a){return parseInt(a,16)}function D(a){return"string"==typeof a&&-1!=a.indexOf(".")&&1===parseFloat(a)}function E(a){return"string"==typeof a&&-1!=a.indexOf("%")}function F(a){return 1==a.length?"0"+a:""+a}function G(a){return 1>=a&&(a=100*a+"%"),a}function H(b){return a.round(255*parseFloat(b)).toString(16)}function I(a){return C(a)/255}function J(a){return!!V.CSS_UNIT.exec(a)}function K(a){a=a.replace(M,"").replace(N,"").toLowerCase();var b=!1;if(T[a])a=T[a],b=!0;else if("transparent"==a)return{r:0,g:0,b:0,a:0,format:"name"};var c;return(c=V.rgb.exec(a))?{r:c[1],g:c[2],b:c[3]}:(c=V.rgba.exec(a))?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=V.hsl.exec(a))?{h:c[1],s:c[2],l:c[3]}:(c=V.hsla.exec(a))?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=V.hsv.exec(a))?{h:c[1],s:c[2],v:c[3]}:(c=V.hsva.exec(a))?{h:c[1],s:c[2],v:c[3],a:c[4]}:(c=V.hex8.exec(a))?{r:C(c[1]),g:C(c[2]),b:C(c[3]),a:I(c[4]),format:b?"name":"hex8"}:(c=V.hex6.exec(a))?{r:C(c[1]),g:C(c[2]),b:C(c[3]),format:b?"name":"hex"}:(c=V.hex4.exec(a))?{r:C(c[1]+""+c[1]),g:C(c[2]+""+c[2]),b:C(c[3]+""+c[3]),a:I(c[4]+""+c[4]),format:b?"name":"hex8"}:(c=V.hex3.exec(a))?{r:C(c[1]+""+c[1]),g:C(c[2]+""+c[2]),b:C(c[3]+""+c[3]),format:b?"name":"hex"}:!1}function L(a){var b,c;return a=a||{level:"AA",size:"small"},b=(a.level||"AA").toUpperCase(),c=(a.size||"small").toLowerCase(),"AA"!==b&&"AAA"!==b&&(b="AA"),"small"!==c&&"large"!==c&&(c="small"),{level:b,size:c}}var M=/^\s+/,N=/\s+$/,O=0,P=a.round,Q=a.min,R=a.max,S=a.random;b.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var a=this.toRgb();return(299*a.r+587*a.g+114*a.b)/1e3},getLuminance:function(){var b,c,d,e,f,g,h=this.toRgb();return b=h.r/255,c=h.g/255,d=h.b/255,e=.03928>=b?b/12.92:a.pow((b+.055)/1.055,2.4),f=.03928>=c?c/12.92:a.pow((c+.055)/1.055,2.4),g=.03928>=d?d/12.92:a.pow((d+.055)/1.055,2.4),.2126*e+.7152*f+.0722*g},setAlpha:function(a){return this._a=z(a),this._roundA=P(100*this._a)/100,this},toHsv:function(){var a=g(this._r,this._g,this._b);return{h:360*a.h,s:a.s,v:a.v,a:this._a}},toHsvString:function(){var a=g(this._r,this._g,this._b),b=P(360*a.h),c=P(100*a.s),d=P(100*a.v);return 1==this._a?"hsv("+b+", "+c+"%, "+d+"%)":"hsva("+b+", "+c+"%, "+d+"%, "+this._roundA+")"},toHsl:function(){var a=e(this._r,this._g,this._b);return{h:360*a.h,s:a.s,l:a.l,a:this._a}},toHslString:function(){var a=e(this._r,this._g,this._b),b=P(360*a.h),c=P(100*a.s),d=P(100*a.l);return 1==this._a?"hsl("+b+", "+c+"%, "+d+"%)":"hsla("+b+", "+c+"%, "+d+"%, "+this._roundA+")"},toHex:function(a){return i(this._r,this._g,this._b,a)},toHexString:function(a){return"#"+this.toHex(a)},toHex8:function(a){return j(this._r,this._g,this._b,this._a,a)},toHex8String:function(a){return"#"+this.toHex8(a)},toRgb:function(){return{r:P(this._r),g:P(this._g),b:P(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+P(this._r)+", "+P(this._g)+", "+P(this._b)+")":"rgba("+P(this._r)+", "+P(this._g)+", "+P(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:P(100*A(this._r,255))+"%",g:P(100*A(this._g,255))+"%",b:P(100*A(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+P(100*A(this._r,255))+"%, "+P(100*A(this._g,255))+"%, "+P(100*A(this._b,255))+"%)":"rgba("+P(100*A(this._r,255))+"%, "+P(100*A(this._g,255))+"%, "+P(100*A(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":this._a<1?!1:U[i(this._r,this._g,this._b,!0)]||!1},toFilter:function(a){var c="#"+k(this._r,this._g,this._b,this._a),d=c,e=this._gradientType?"GradientType = 1, ":"";if(a){var f=b(a);d="#"+k(f._r,f._g,f._b,f._a)}return"progid:DXImageTransform.Microsoft.gradient("+e+"startColorstr="+c+",endColorstr="+d+")"},toString:function(a){var b=!!a;a=a||this._format;var c=!1,d=this._a<1&&this._a>=0,e=!b&&d&&("hex"===a||"hex6"===a||"hex3"===a||"hex4"===a||"hex8"===a||"name"===a);return e?"name"===a&&0===this._a?this.toName():this.toRgbString():("rgb"===a&&(c=this.toRgbString()),"prgb"===a&&(c=this.toPercentageRgbString()),("hex"===a||"hex6"===a)&&(c=this.toHexString()),"hex3"===a&&(c=this.toHexString(!0)),"hex4"===a&&(c=this.toHex8String(!0)),"hex8"===a&&(c=this.toHex8String()),"name"===a&&(c=this.toName()),"hsl"===a&&(c=this.toHslString()),"hsv"===a&&(c=this.toHsvString()),c||this.toHexString())},clone:function(){return b(this.toString())},_applyModification:function(a,b){var c=a.apply(null,[this].concat([].slice.call(b)));return this._r=c._r,this._g=c._g,this._b=c._b,this.setAlpha(c._a),this},lighten:function(){return this._applyModification(o,arguments)},brighten:function(){return this._applyModification(p,arguments)},darken:function(){return this._applyModification(q,arguments)},desaturate:function(){return this._applyModification(l,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(n,arguments)},spin:function(){return this._applyModification(r,arguments)},_applyCombination:function(a,b){return a.apply(null,[this].concat([].slice.call(b)))},analogous:function(){return this._applyCombination(w,arguments)},complement:function(){return this._applyCombination(s,arguments)},monochromatic:function(){return this._applyCombination(x,arguments)},splitcomplement:function(){return this._applyCombination(v,arguments)},triad:function(){return this._applyCombination(t,arguments)},tetrad:function(){return this._applyCombination(u,arguments)}},b.fromRatio=function(a,c){if("object"==typeof a){var d={};for(var e in a)a.hasOwnProperty(e)&&(d[e]="a"===e?a[e]:G(a[e]));a=d}return b(a,c)},b.equals=function(a,c){return a&&c?b(a).toRgbString()==b(c).toRgbString():!1},b.random=function(){return b.fromRatio({r:S(),g:S(),b:S()})},b.mix=function(a,c,d){d=0===d?0:d||50;var e=b(a).toRgb(),f=b(c).toRgb(),g=d/100,h={r:(f.r-e.r)*g+e.r,g:(f.g-e.g)*g+e.g,b:(f.b-e.b)*g+e.b,a:(f.a-e.a)*g+e.a};return b(h)},b.readability=function(c,d){var e=b(c),f=b(d);return(a.max(e.getLuminance(),f.getLuminance())+.05)/(a.min(e.getLuminance(),f.getLuminance())+.05)},b.isReadable=function(a,c,d){var e,f,g=b.readability(a,c);switch(f=!1,e=L(d),e.level+e.size){case"AAsmall":case"AAAlarge":f=g>=4.5;break;case"AAlarge":f=g>=3;break;case"AAAsmall":f=g>=7}return f},b.mostReadable=function(a,c,d){var e,f,g,h,i=null,j=0;d=d||{},f=d.includeFallbackColors,g=d.level,h=d.size;for(var k=0;kj&&(j=e,i=b(c[k]));return b.isReadable(a,i,{level:g,size:h})||!f?i:(d.includeFallbackColors=!1,b.mostReadable(a,["#fff","#000"],d))};var T=b.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},U=b.hexNames=y(T),V=function(){var a="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",c="(?:"+b+")|(?:"+a+")",d="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?",e="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?";return{CSS_UNIT:new RegExp(c),rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+e),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+e),hsv:new RegExp("hsv"+d),hsva:new RegExp("hsva"+e),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();"undefined"!=typeof module&&module.exports?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):window.tinycolor=b}(Math); -------------------------------------------------------------------------------- /dist/lib/zepto.min.js: -------------------------------------------------------------------------------- 1 | /* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */ 2 | !function(t,e){"function"==typeof define&&define.amd?define(function(){return e(t)}):e(t)}(this,function(t){var e=function(){function $(t){return null==t?String(t):S[C.call(t)]||"object"}function F(t){return"function"==$(t)}function k(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function R(t){return"object"==$(t)}function Z(t){return R(t)&&!k(t)&&Object.getPrototypeOf(t)==Object.prototype}function z(t){var e=!!t&&"length"in t&&t.length,n=r.type(t);return"function"!=n&&!k(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function q(t){return a.call(t,function(t){return null!=t})}function H(t){return t.length>0?r.fn.concat.apply([],t):t}function I(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function V(t){return t in l?l[t]:l[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function _(t,e){return"number"!=typeof e||h[I(t)]?e:e+"px"}function B(t){var e,n;return c[t]||(e=f.createElement(t),f.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),c[t]=n),c[t]}function U(t){return"children"in t?u.call(t.children):r.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function X(t,e){var n,r=t?t.length:0;for(n=0;r>n;n++)this[n]=t[n];this.length=r,this.selector=e||""}function J(t,r,i){for(n in r)i&&(Z(r[n])||L(r[n]))?(Z(r[n])&&!Z(t[n])&&(t[n]={}),L(r[n])&&!L(t[n])&&(t[n]=[]),J(t[n],r[n],i)):r[n]!==e&&(t[n]=r[n])}function W(t,e){return null==e?r(t):r(t).filter(e)}function Y(t,e,n,r){return F(e)?e.call(t,n,r):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function K(t,n){var r=t.className||"",i=r&&r.baseVal!==e;return n===e?i?r.baseVal:r:void(i?r.baseVal=n:t.className=n)}function Q(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?r.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,r=t.childNodes.length;r>n;n++)tt(t.childNodes[n],e)}var e,n,r,i,O,P,o=[],s=o.concat,a=o.filter,u=o.slice,f=t.document,c={},l={},h={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},p=/^\s*<(\w+|!)[^>]*>/,d=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,g=/^(?:body|html)$/i,v=/([A-Z])/g,y=["val","css","html","text","data","width","height","offset"],x=["after","prepend","before","append"],b=f.createElement("table"),E=f.createElement("tr"),j={tr:f.createElement("tbody"),tbody:b,thead:b,tfoot:b,td:E,th:E,"*":f.createElement("div")},w=/complete|loaded|interactive/,T=/^[\w-]*$/,S={},C=S.toString,N={},A=f.createElement("div"),D={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},L=Array.isArray||function(t){return t instanceof Array};return N.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=A).appendChild(t),r=~N.qsa(i,e).indexOf(t),o&&A.removeChild(t),r},O=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},P=function(t){return a.call(t,function(e,n){return t.indexOf(e)==n})},N.fragment=function(t,n,i){var o,s,a;return d.test(t)&&(o=r(f.createElement(RegExp.$1))),o||(t.replace&&(t=t.replace(m,"<$1>")),n===e&&(n=p.test(t)&&RegExp.$1),n in j||(n="*"),a=j[n],a.innerHTML=""+t,o=r.each(u.call(a.childNodes),function(){a.removeChild(this)})),Z(i)&&(s=r(o),r.each(i,function(t,e){y.indexOf(t)>-1?s[t](e):s.attr(t,e)})),o},N.Z=function(t,e){return new X(t,e)},N.isZ=function(t){return t instanceof N.Z},N.init=function(t,n){var i;if(!t)return N.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&p.test(t))i=N.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}else{if(F(t))return r(f).ready(t);if(N.isZ(t))return t;if(L(t))i=q(t);else if(R(t))i=[t],t=null;else if(p.test(t))i=N.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}}return N.Z(i,t)},r=function(t,e){return N.init(t,e)},r.extend=function(t){var e,n=u.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){J(t,n,e)}),t},N.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=T.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:u.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},r.contains=f.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},r.type=$,r.isFunction=F,r.isWindow=k,r.isArray=L,r.isPlainObject=Z,r.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},r.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},r.inArray=function(t,e,n){return o.indexOf.call(e,t,n)},r.camelCase=O,r.trim=function(t){return null==t?"":String.prototype.trim.call(t)},r.uuid=0,r.support={},r.expr={},r.noop=function(){},r.map=function(t,e){var n,i,o,r=[];if(z(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return o.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return F(t)?this.not(this.not(t)):r(a.call(this,function(e){return N.matches(e,t)}))},add:function(t,e){return r(P(this.concat(r(t,e))))},is:function(t){return this.length>0&&N.matches(this[0],t)},not:function(t){var n=[];if(F(t)&&t.call!==e)this.each(function(e){t.call(this,e)||n.push(this)});else{var i="string"==typeof t?this.filter(t):z(t)&&F(t.item)?u.call(t):r(t);this.forEach(function(t){i.indexOf(t)<0&&n.push(t)})}return r(n)},has:function(t){return this.filter(function(){return R(t)?r.contains(this,t):r(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!R(t)?t:r(t)},last:function(){var t=this[this.length-1];return t&&!R(t)?t:r(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?r(t).filter(function(){var t=this;return o.some.call(n,function(e){return r.contains(e,t)})}):1==this.length?r(N.qsa(this[0],t)):this.map(function(){return N.qsa(this,t)}):r()},closest:function(t,e){var n=[],i="object"==typeof t&&r(t);return this.each(function(r,o){for(;o&&!(i?i.indexOf(o)>=0:N.matches(o,t));)o=o!==e&&!M(o)&&o.parentNode;o&&n.indexOf(o)<0&&n.push(o)}),r(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=r.map(n,function(t){return(t=t.parentNode)&&!M(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return W(e,t)},parent:function(t){return W(P(this.pluck("parentNode")),t)},children:function(t){return W(this.map(function(){return U(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||u.call(this.childNodes)})},siblings:function(t){return W(this.map(function(t,e){return a.call(U(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return r.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=B(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=F(t);if(this[0]&&!e)var n=r(t).get(0),i=n.parentNode||this.length>1;return this.each(function(o){r(this).wrapAll(e?t.call(this,o):i?n.cloneNode(!0):n)})},wrapAll:function(t){if(this[0]){r(this[0]).before(t=r(t));for(var e;(e=t.children()).length;)t=e.first();r(t).append(this)}return this},wrapInner:function(t){var e=F(t);return this.each(function(n){var i=r(this),o=i.contents(),s=e?t.call(this,n):t;o.length?o.wrapAll(s):i.append(s)})},unwrap:function(){return this.parent().each(function(){r(this).replaceWith(r(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var n=r(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()})},prev:function(t){return r(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return r(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;r(this).empty().append(Y(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=Y(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,r){var i;return"string"!=typeof t||1 in arguments?this.each(function(e){if(1===this.nodeType)if(R(t))for(n in t)G(this,n,t[n]);else G(this,t,Y(this,r,e,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(i=this[0].getAttribute(t))?i:e},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){G(this,t)},this)})},prop:function(t,e){return t=D[t]||t,1 in arguments?this.each(function(n){this[t]=Y(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=D[t]||t,this.each(function(){delete this[t]})},data:function(t,n){var r="data-"+t.replace(v,"-$1").toLowerCase(),i=1 in arguments?this.attr(r,n):this.attr(r);return null!==i?Q(i):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=Y(this,t,e,this.value)})):this[0]&&(this[0].multiple?r(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=r(this),i=Y(this,e,t,n.offset()),o=n.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==n.css("position")&&(s.position="relative"),n.css(s)});if(!this.length)return null;if(f.documentElement!==this[0]&&!r.contains(f.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var i=this[0];if("string"==typeof t){if(!i)return;return i.style[O(t)]||getComputedStyle(i,"").getPropertyValue(t)}if(L(t)){if(!i)return;var o={},s=getComputedStyle(i,"");return r.each(t,function(t,e){o[e]=i.style[O(e)]||s.getPropertyValue(e)}),o}}var a="";if("string"==$(t))e||0===e?a=I(t)+":"+_(t,e):this.each(function(){this.style.removeProperty(I(t))});else for(n in t)t[n]||0===t[n]?a+=I(n)+":"+_(n,t[n])+";":this.each(function(){this.style.removeProperty(I(n))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(r(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?o.some.call(this,function(t){return this.test(K(t))},V(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var n=K(this),o=Y(this,t,e,n);o.split(/\s+/g).forEach(function(t){r(this).hasClass(t)||i.push(t)},this),i.length&&K(this,n+(n?" ":"")+i.join(" "))}}):this},removeClass:function(t){return this.each(function(n){if("className"in this){if(t===e)return K(this,"");i=K(this),Y(this,t,n,i).split(/\s+/g).forEach(function(t){i=i.replace(V(t)," ")}),K(this,i.trim())}})},toggleClass:function(t,n){return t?this.each(function(i){var o=r(this),s=Y(this,t,i,K(this));s.split(/\s+/g).forEach(function(t){(n===e?!o.hasClass(t):n)?o.addClass(t):o.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=g.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(r(t).css("margin-top"))||0,n.left-=parseFloat(r(t).css("margin-left"))||0,i.top+=parseFloat(r(e[0]).css("border-top-width"))||0,i.left+=parseFloat(r(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||f.body;t&&!g.test(t.nodeName)&&"static"==r(t).css("position");)t=t.offsetParent;return t})}},r.fn.detach=r.fn.remove,["width","height"].forEach(function(t){var n=t.replace(/./,function(t){return t[0].toUpperCase()});r.fn[t]=function(i){var o,s=this[0];return i===e?k(s)?s["inner"+n]:M(s)?s.documentElement["scroll"+n]:(o=this.offset())&&o[t]:this.each(function(e){s=r(this),s.css(t,Y(this,i,e,s[t]()))})}}),x.forEach(function(n,i){var o=i%2;r.fn[n]=function(){var n,a,s=r.map(arguments,function(t){var i=[];return n=$(t),"array"==n?(t.forEach(function(t){return t.nodeType!==e?i.push(t):r.zepto.isZ(t)?i=i.concat(t.get()):void(i=i.concat(N.fragment(t)))}),i):"object"==n||null==t?t:N.fragment(t)}),u=this.length>1;return s.length<1?this:this.each(function(e,n){a=o?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var c=r.contains(f.documentElement,a);s.forEach(function(e){if(u)e=e.cloneNode(!0);else if(!a)return r(e).remove();a.insertBefore(e,n),c&&tt(e,function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},r.fn[o?n+"To":"insert"+(i?"Before":"After")]=function(t){return r(t)[n](this),this}}),N.Z.prototype=X.prototype=r.fn,N.uniq=P,N.deserializeValue=Q,r.zepto=N,r}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function h(t){return t._zid||(t._zid=n++)}function p(t,e,n,r){if(e=d(e),e.ns)var i=m(e.ns);return(a[h(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)})}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function m(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function g(t,e){return t.del&&!f&&t.e in c||!!e}function v(t){return l[t]||f&&c[t]||t}function y(t,n,i,o,s,u,f){var c=h(t),p=a[c]||(a[c]=[]);n.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(i);var a=d(n);a.fn=i,a.sel=s,a.e in l&&(i=function(t){var n=t.relatedTarget;return!n||n!==this&&!e.contains(this,n)?a.fn.apply(this,arguments):void 0}),a.del=u;var c=u||i;a.proxy=function(e){if(e=T(e),!e.isImmediatePropagationStopped()){e.data=o;var n=c.apply(t,e._args==r?[e]:[e].concat(e._args));return n===!1&&(e.preventDefault(),e.stopPropagation()),n}},a.i=p.length,p.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,g(a,f))})}function x(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach(function(e){p(t,e,n,r).forEach(function(e){delete a[o][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,g(e,i))})})}function T(t,n){return(n||!t.isDefaultPrevented)&&(n||(n=t),e.each(w,function(e,r){var i=n[e];t[e]=function(){return this[r]=b,i&&i.apply(n,arguments)},t[r]=E}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==r?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=b)),t}function S(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===r||(n[e]=t[e]);return T(n,t)}var r,n=1,i=Array.prototype.slice,o=e.isFunction,s=function(t){return"string"==typeof t},a={},u={},f="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:x},e.proxy=function(t,n){var r=2 in arguments&&i.call(arguments,2);if(o(t)){var a=function(){return t.apply(n,r?r.concat(i.call(arguments)):arguments)};return a._zid=h(t),a}if(s(n))return r?(r.unshift(t[n],t),e.proxy.apply(null,r)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var b=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,w={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,a,u,f){var c,l,h=this;return t&&!s(t)?(e.each(t,function(t,e){h.on(t,n,a,e,f)}),h):(s(n)||o(u)||u===!1||(u=a,a=n,n=r),(u===r||a===!1)&&(u=a,a=r),u===!1&&(u=E),h.each(function(r,o){f&&(c=function(t){return x(o,t.type,u),u.apply(this,arguments)}),n&&(l=function(t){var r,s=e(t.target).closest(n,o).get(0);return s&&s!==o?(r=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||u).apply(s,[r].concat(i.call(arguments,1)))):void 0}),y(o,t,u,a,n,l||c)}))},e.fn.off=function(t,n,i){var a=this;return t&&!s(t)?(e.each(t,function(t,e){a.off(t,n,e)}),a):(s(n)||o(i)||i===!1||(i=n,n=r),i===!1&&(i=E),a.each(function(){x(this,t,i,n)}))},e.fn.trigger=function(t,n){return t=s(t)||e.isPlainObject(t)?e.Event(t):T(t),t._args=n,this.each(function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,i;return this.each(function(o,a){r=S(s(t)?e.Event(t):t),r._args=n,r.target=a,e.each(p(a,t.type||t),function(t,e){return i=e.proxy(r),r.isImmediatePropagationStopped()?!1:void 0})}),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(t,e){s(t)||(e=t,t=e.type);var n=document.createEvent(u[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),T(n)}}(e),function(e){function p(t,n,r){var i=e.Event(n);return e(t).trigger(i,r),!i.isDefaultPrevented()}function d(t,e,n,i){return t.global?p(e||r,n,i):void 0}function m(t){t.global&&0===e.active++&&d(t,null,"ajaxStart")}function g(t){t.global&&!--e.active&&d(t,null,"ajaxStop")}function v(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||d(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void d(e,n,"ajaxSend",[t,e])}function y(t,e,n,r){var i=n.context,o="success";n.success.call(i,t,o,e),r&&r.resolveWith(i,[t,o,e]),d(n,i,"ajaxSuccess",[e,n,t]),b(o,e,n)}function x(t,e,n,r,i){var o=r.context;r.error.call(o,n,e,t),i&&i.rejectWith(o,[n,e,t]),d(r,o,"ajaxError",[n,r,t||e]),b(e,n,r)}function b(t,e,n){var r=n.context;n.complete.call(r,e,t),d(n,r,"ajaxComplete",[e,n]),g(n)}function E(t,e,n){if(n.dataFilter==j)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function j(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==c?"html":t==f?"json":a.test(t)?"script":u.test(t)&&"xml")||"text"}function T(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function S(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=T(t.url,t.data),t.data=void 0)}function C(t,n,r,i){return e.isFunction(n)&&(i=r,r=n,n=void 0),e.isFunction(r)||(i=r,r=void 0),{url:t,data:n,success:r,dataType:i}}function O(t,n,r,i){var o,s=e.isArray(n),a=e.isPlainObject(n);e.each(n,function(n,u){o=e.type(u),i&&(n=r?i:i+"["+(a||"object"==o||"array"==o?n:"")+"]"),!i&&s?t.add(u.name,u.value):"array"==o||!r&&"object"==o?O(t,u,r,n):t.add(n,u)})}var i,o,n=+new Date,r=t.document,s=/)<[^<]*)*<\/script>/gi,a=/^(?:text|application)\/javascript/i,u=/^(?:text|application)\/xml/i,f="application/json",c="text/html",l=/^\s*$/,h=r.createElement("a");h.href=t.location.href,e.active=0,e.ajaxJSONP=function(i,o){if(!("type"in i))return e.ajax(i);var c,p,s=i.jsonpCallback,a=(e.isFunction(s)?s():s)||"Zepto"+n++,u=r.createElement("script"),f=t[a],l=function(t){e(u).triggerHandler("error",t||"abort")},h={abort:l};return o&&o.promise(h),e(u).on("load error",function(n,r){clearTimeout(p),e(u).off().remove(),"error"!=n.type&&c?y(c[0],h,i,o):x(null,r||"error",h,i,o),t[a]=f,c&&e.isFunction(f)&&f(c[0]),f=c=void 0}),v(h,i)===!1?(l("abort"),h):(t[a]=function(){c=arguments},u.src=i.url.replace(/\?(.+)=\?/,"?$1="+a),r.head.appendChild(u),i.timeout>0&&(p=setTimeout(function(){l("timeout")},i.timeout)),h)},e.ajaxSettings={type:"GET",beforeSend:j,success:j,error:j,complete:j,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:f,xml:"application/xml, text/xml",html:c,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:j},e.ajax=function(n){var u,f,s=e.extend({},n||{}),a=e.Deferred&&e.Deferred();for(i in e.ajaxSettings)void 0===s[i]&&(s[i]=e.ajaxSettings[i]);m(s),s.crossDomain||(u=r.createElement("a"),u.href=s.url,u.href=u.href,s.crossDomain=h.protocol+"//"+h.host!=u.protocol+"//"+u.host),s.url||(s.url=t.location.toString()),(f=s.url.indexOf("#"))>-1&&(s.url=s.url.slice(0,f)),S(s);var c=s.dataType,p=/\?.+=\?/.test(s.url);if(p&&(c="jsonp"),s.cache!==!1&&(n&&n.cache===!0||"script"!=c&&"jsonp"!=c)||(s.url=T(s.url,"_="+Date.now())),"jsonp"==c)return p||(s.url=T(s.url,s.jsonp?s.jsonp+"=?":s.jsonp===!1?"":"callback=?")),e.ajaxJSONP(s,a);var P,d=s.accepts[c],g={},b=function(t,e){g[t.toLowerCase()]=[t,e]},C=/^([\w-]+:)\/\//.test(s.url)?RegExp.$1:t.location.protocol,N=s.xhr(),O=N.setRequestHeader;if(a&&a.promise(N),s.crossDomain||b("X-Requested-With","XMLHttpRequest"),b("Accept",d||"*/*"),(d=s.mimeType||d)&&(d.indexOf(",")>-1&&(d=d.split(",",2)[0]),N.overrideMimeType&&N.overrideMimeType(d)),(s.contentType||s.contentType!==!1&&s.data&&"GET"!=s.type.toUpperCase())&&b("Content-Type",s.contentType||"application/x-www-form-urlencoded"),s.headers)for(o in s.headers)b(o,s.headers[o]);if(N.setRequestHeader=b,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=j,clearTimeout(P);var t,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&"file:"==C){if(c=c||w(s.mimeType||N.getResponseHeader("content-type")),"arraybuffer"==N.responseType||"blob"==N.responseType)t=N.response;else{t=N.responseText;try{t=E(t,c,s),"script"==c?(1,eval)(t):"xml"==c?t=N.responseXML:"json"==c&&(t=l.test(t)?null:e.parseJSON(t))}catch(r){n=r}if(n)return x(n,"parsererror",N,s,a)}y(t,N,s,a)}else x(N.statusText||null,N.status?"error":"abort",N,s,a)}},v(N,s)===!1)return N.abort(),x(null,"abort",N,s,a),N;var A="async"in s?s.async:!0;if(N.open(s.type,s.url,A,s.username,s.password),s.xhrFields)for(o in s.xhrFields)N[o]=s.xhrFields[o];for(o in g)O.apply(N,g[o]);return s.timeout>0&&(P=setTimeout(function(){N.onreadystatechange=j,N.abort(),x(null,"timeout",N,s,a)},s.timeout)),N.send(s.data?s.data:null),N},e.get=function(){return e.ajax(C.apply(null,arguments))},e.post=function(){var t=C.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=C.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,r){if(!this.length)return this;var a,i=this,o=t.split(/\s/),u=C(t,n,r),f=u.success;return o.length>1&&(u.url=o[0],a=o[1]),u.success=function(t){i.html(a?e("
").html(t.replace(s,"")).find(a):t),f&&f.apply(i,arguments)},e.ajax(u),this};var N=encodeURIComponent;e.param=function(t,n){var r=[];return r.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(N(t)+"="+N(n))},O(r,t,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;t.getComputedStyle=function(t,e){try{return n(t,e)}catch(r){return null}}}}(),e}); -------------------------------------------------------------------------------- /dist/lipstick.json: -------------------------------------------------------------------------------- 1 | {"brands":[{"name":"圣罗兰","series":[{"name":"莹亮纯魅唇膏","lipsticks":[{"color":"#D62352","id":"49","name":"撩骚"},{"color":"#DC4B41","id":"14","name":"一见倾心"},{"color":"#B22146","id":"05","name":"浮生若梦"},{"color":"#A25356","id":"08","name":"纯真梦幻"},{"color":"#DF3443","id":"12","name":"红粉派对"},{"color":"#E06C68","id":"15","name":"珊瑚恋人"},{"color":"#842C71","id":"19","name":"华丽转身"},{"color":"#D13C4F","id":"43","name":"唇印"},{"color":"#B71D32","id":"04","name":"危情禁果"},{"color":"#DE2361","id":"06","name":"情窦初开"},{"color":"#B05856","id":"09","name":"裸色暗恋"},{"color":"#E06F70","id":"13","name":"邂逅巴黎"},{"color":"#CD4143","id":"16","name":"糖果女孩"},{"color":"#EC6A70","id":"41","name":"告白"},{"color":"#EFE9DE","id":"42","name":"初恋"},{"color":"#C60F2F","id":"45","name":"拥吻"},{"color":"#BB6868","id":"47","name":"心跳"},{"color":"#E0186B","id":"50","name":"约定"},{"color":"#D45E85","id":"52","name":"游戏"},{"color":"#C16E6F","id":"44","name":"意外"},{"color":"#D1121B","id":"46","name":"钟情"},{"color":"#8E243E","id":"48","name":"夜色"},{"color":"#EE7486","id":"51","name":"私语"}]},{"name":"纯口红","lipsticks":[{"id":"19","color":"#B13C79","name":"玫红色"},{"id":"13","color":"#BB1813","name":"正橘色"},{"id":"52","color":"#EA4E59","name":"星星色"},{"id":"01","color":"#B8122B","name":"正红色"},{"id":"17","color":"#F75E70","name":"嫣粉纱丽"},{"id":"07","color":"#CB2276","name":"雅紫纱蓉"},{"id":"09","color":"#C27482","name":"绛紫丝绒"},{"id":"11","color":"#C06B72","name":"藕粉云罗"},{"id":"16","color":"#BB444A","name":"绯红香缎"},{"id":"22","color":"#E86E9F","name":"莹亮裸粉"},{"id":"23","color":"#DE6F5C","name":"杏色府绸"},{"id":"26","color":"#CC6D84","name":"堇色流纱"},{"id":"36","color":"#ED695D","name":"珊瑚雪纺"},{"id":"49","color":"#DC4D8D","name":"想你色"},{"id":"51","color":"#FA6C55","name":"莹亮珊瑚橙"},{"id":"56","color":"#D9100E","name":"橙红织锦"},{"id":"59","color":"#B96463","name":"裸色薄纱"},{"id":"207","color":"#CA4061","name":"珊瑚柚"},{"id":"208","color":"#D60846","name":"玫红色"},{"id":"27","color":"#D24379","name":"纯真玫红"},{"id":"50","color":"#DC2923","name":"前卫霓红"},{"id":"57","color":"#C7153D","name":"明亮裸唇"},{"id":"58","color":"#B25D84","name":"明亮淡紫"},{"id":"201","color":"#B01020","name":"红唇印象"},{"id":"202","color":"#9E2C2C","name":"疯狂玫瑰"},{"id":"203","color":"#940220","name":"摇滚红唇"},{"id":"205","color":"#550001","name":"天然浆果"},{"id":"72","color":"#9A1B2F","name":""},{"id":"73","color":"#CF0410","name":""},{"id":"74","color":"#E0291B","name":""},{"id":"211","color":"#E4004F","name":"DECADENT"},{"id":"212","color":"#A53B4F","name":"ALTERNATIVEPLUM"},{"id":"213","color":"#E94138","name":"ORANGE SEVENTIES"},{"id":"215","color":"#E34E90","name":"LUST FOR PINK"},{"id":"216","color":"#DE455A","name":"RED CLASH"},{"id":"217","color":"#DE455A","name":"NUDE TROUBLE"}]},{"name":"莹亮纯魅美唇膏","lipsticks":[{"id":"11","color":"#D51768","name":"玫色游戏"},{"id":"3","color":"#F18885","name":"玫瑰轻语"},{"id":"8","color":"#E52322","name":"橙色放纵"},{"id":"4","color":"#DA0140","name":"桃红欲望"},{"id":"1","color":"#C05B60","name":"裸色幻想"},{"id":"2","color":"#E87593","name":"粉色嬉戏"},{"id":"5","color":"#630F28","name":"梅色撩拨"},{"id":"6","color":"#CC0824","name":"红色触碰"},{"id":"7","color":"#ED6D68","name":"珊瑚挑逗"},{"id":"9","color":"#E73458","name":"粉色纵情"},{"id":"10","color":"#A00F30","name":"绯红诱惑"},{"id":"12","color":"#B81D3D","name":"苺色暧昧"}]},{"name":"纯色唇釉叛逆裸唇","lipsticks":[{"id":"12","color":"#D0011E","name":"红绯"},{"id":"46","color":"#9F182C","name":"深红色"},{"id":"50","color":"#C64E5B","name":"自然珊瑚"},{"id":"08","color":"#C41304","name":"唐橘"},{"id":"07","color":"#CC2010","name":"蜜柚"},{"id":"09","color":"#D4020E","name":"红釉"},{"id":"11","color":"#D0010B","name":"洋红"},{"id":"13","color":"#CC030E","name":"茜色"},{"id":"15","color":"#D41B40","name":"桃红"},{"id":"42","color":"#DF294E","name":"风情橘红"},{"id":"43","color":"#E23E44","name":"玫瑰歌谣"},{"id":"47","color":"#BC3250","name":"桃红色"},{"id":"48","color":"#C13E30","name":"橙色"},{"id":"49","color":"#BB325C","name":"梅子色"},{"id":"51","color":"#951E53","name":"玫红色"},{"id":"200","color":"#DC9F8F","name":"丰唇唇釉"}]},{"name":"莹亮绚染唇油","lipsticks":[{"id":"05","color":"#FF54A3","name":"樱桃情人"},{"id":"04","color":"#FF725D","name":"粉恋玫瑰"},{"id":"06","color":"#C072B5","name":"蜜桃热恋"},{"id":"07","color":"#FFD0DD","name":"橙色邂逅"},{"id":"08","color":"#FF7B1E","name":"粉色憧憬"}]},{"name":"甜吻唇颊霜","lipsticks":[{"id":"05","color":"#E21949","name":"洋红色"},{"id":"01","color":"#DD2269","name":"玫红色"},{"id":"02","color":"#E05572","name":"樱花粉"},{"id":"03","color":"#D16479","name":"裸粉色"},{"id":"04","color":"#DF4A43","name":"亮橘色"},{"id":"07","color":"#DC6B5D","name":"珊瑚橙"},{"id":"08","color":"#DE6A78","name":"珊瑚粉"},{"id":"09","color":"#BF7083","name":"珊瑚柚"},{"id":"12","color":"#AD625E","name":"摩卡色"}]},{"name":"莹亮灿金唇彩","lipsticks":[{"id":"49","color":"#D03370","name":"骚动"},{"id":"207","color":"#D11746","name":"激情"},{"id":"03","color":"#D34E59","name":"憧憬"},{"id":"15","color":"#AB3B48","name":"突然"},{"id":"30","color":"#DD6053","name":"甜蜜"},{"id":"203","color":"#FE645A","name":"心跳"},{"id":"204","color":"#FE5B56","name":"意外"},{"id":"206","color":"#B80722","name":"炙热"}]}]},{"name":"香奈儿可可小姐","series":[{"name":"唇膏水亮","lipsticks":[{"id":"69","color":"#F17365","name":"传情"},{"id":"46","color":"#E87268","name":"自由"},{"id":"122","color":"#EA4D4A","name":"CORAIL RADIEUX"},{"id":"97","color":"#D53D49","name":"洒脱"},{"id":"44","color":"#FD4334","name":"水漾纱丽"},{"id":"507","color":"#E94648","name":"倔强"},{"id":"114","color":"#FF3220","name":"SHIPSHAPE"},{"id":"91","color":"#C12A33","name":"波希米亚"},{"id":"84","color":"#CE1220","name":"对白"},{"id":"57","color":"#EB6F79","name":"冒险"},{"id":"116","color":"#EC5193","name":"MIGHTY"},{"id":"54","color":"#D1918D","name":"卡柏男孩"},{"id":"79","color":"#E86A75","name":"传奇"},{"id":"497","color":"#ED5A5E","name":"勇敢"},{"id":"132","color":"#E93A5B","name":"ROSE RAVISSANT"},{"id":"87","color":"#F8657F","name":"约会"},{"id":"55","color":"#F14C77","name":"浪漫爱情"},{"id":"118","color":"#EB2755","name":"ENERGY"},{"id":"62","color":"#E12948","name":"蒙特卡罗"},{"id":"134","color":"#E7394A","name":"RENOUVEAU"},{"id":"98","color":"#CC4D68","name":"率真"},{"id":"60","color":"#BB395F","name":"安蒂岗妮"},{"id":"61","color":"#C54463","name":"幸福时光"}]},{"name":"炫亮魅力唇膏","lipsticks":[{"id":"90","color":"#FC6E48","name":"活泼"},{"id":"96","color":"#FA421C","name":"古灵精怪"},{"id":"182","color":"#E02E20","name":"VIBRANTE"},{"id":"152","color":"#E82F2C","name":"隐约"},{"id":"172","color":"#E40021","name":"ROUGE REBELLE"},{"id":"135","color":"#99413D","name":"谜情"},{"id":"99","color":"#8A010D","name":"海盗"},{"id":"176","color":"#A80D1F","name":"INDÉPENDANTE"},{"id":"169","color":"#8E2622","name":"ROUGE TENTATION"},{"id":"91","color":"#E45661","name":"吸引力"},{"id":"179","color":"#ED6160","name":"LUMINOUS"},{"id":"94","color":"#FC3E6E","name":"着迷"},{"id":"138","color":"#D93E5E","name":"激昂"},{"id":"136","color":"#EF4246","name":"悠扬"},{"id":"178","color":"#BF5363","name":"NEW PRODIGIOUS"},{"id":"158","color":"#B24957","name":"VIREVOLTANTE"},{"id":"93","color":"#CD0043","name":"兴奋"},{"id":"165","color":"#C82C40","name":"ÉBLOUISSANTE"},{"id":"184","color":"#C80F2E","name":"INCANTEVOLE"},{"id":"102","color":"#B20032","name":"悸动"}]},{"name":"炫亮魅力唇膏","lipsticks":[{"id":"90","color":"#E1527E","name":"IMAGINATION"}]},{"name":"炫亮魅力唇膏丝绒","lipsticks":[{"id":"65","color":"#E17062","name":"L'ARISTOCRATICA"},{"id":"64","color":"#E84632","name":"FIRST LIGHT"},{"id":"57","color":"#BE2B24","name":"ROUGE FEU"},{"id":"66","color":"#E1112A","name":"L'INDOMABILE"},{"id":"51","color":"#9E333D","name":"震撼"},{"id":"56","color":"#B23030","name":"ROUGE CHARNEL"},{"id":"38","color":"#892833","name":"迷惑"},{"id":"58","color":"#822E2E","name":"ROUGE VIE"},{"id":"63","color":"#802932","name":"NIGHTFALL"},{"id":"61","color":"#EC7879","name":"LA SECRÈTE"},{"id":"42","color":"#FE697F","name":"显眼"},{"id":"43","color":"#FA5059","name":"亲爱"},{"id":"46","color":"#C92D38","name":"慧黠"},{"id":"37","color":"#C43759","name":"纵情"},{"id":"44","color":"#F06FA5","name":"歌剧名伶"},{"id":"50","color":"#9F2F56","name":"浪漫幻想"}]}]},{"name":"迪奥","series":[{"name":"魅惑釉唇膏","lipsticks":[{"id":"457","color":"#EB636B","name":"鸡尾酒"},{"id":"487","color":"#EB5C97","name":"泡泡堂"},{"id":"550","color":"#E47082","name":"小心计"},{"id":"554","color":"#EA5344","name":"日光浴"},{"id":"564","color":"#E94858","name":"购物狂"},{"id":"577","color":"#C86378","name":"混日子"},{"id":"637","color":"#E74218","name":"热点"},{"id":"644","color":"#EA5331","name":"生存游戏"},{"id":"684","color":"#E60860","name":"人生赢家"},{"id":"740","color":"#902216","name":"可乐部"},{"id":"744","color":"#E51E1B","name":"花蝴蝶"},{"id":"794","color":"#95358C","name":"天生玩家"},{"id":"857","color":"#A01314","name":"好莱坞大咖"},{"id":"867","color":"#901A32","name":"红酒"},{"id":"877","color":"#C4032B","name":"给我迪奥"},{"id":"882","color":"#BB0E63","name":"野蛮女友"},{"id":"904","color":"#391E1D","name":"黑咖啡"},{"id":"924","color":"#602227","name":"不羁"}]},{"name":"魅惑染唇蜜","lipsticks":[{"id":"351","color":"#D8707D","name":"魅惑染唇蜜"},{"id":"421","color":"#AD5F56","name":"魅惑染唇蜜"},{"id":"451","color":"#E55461","name":"Natural Coral"},{"id":"491","color":"#A76165","name":"魅惑染唇蜜"},{"id":"761","color":"#E13D5D","name":"Natural Cherry"},{"id":"771","color":"#974249","name":"Natural Berry"},{"id":"881","color":"#EC6292","name":"Natural Pink"}]},{"name":"烈艳蓝金唇膏","lipsticks":[{"id":"028","color":"#E83F4A","name":"Actrice"},{"id":"426","color":"#D58F7F","name":""},{"id":"481","color":"#B76566","name":""},{"id":"047","color":"#E40068","name":"迪奥小姐"},{"id":"781","color":"#833B43","name":""},{"id":"060","color":"#D36179","name":"首映礼"},{"id":"080","color":"#D91820","name":"微笑正红"},{"id":"861","color":"#B52237","name":""},{"id":"996","color":"#BD7376","name":""},{"id":"999","color":"#A82628","name":""},{"id":"999","color":"#A82628","name":"Metallic"},{"id":"207","color":"#BBC3C2","name":"蒙田灰"},{"id":"277","color":"#DB7096","name":"Osée"},{"id":"343","color":"#EF7C6B","name":"Panaréa"},{"id":"351","color":"#E46177","name":"Dansante"},{"id":"459","color":"#D1546E","name":"Charnelle"},{"id":"520","color":"#E4003E","name":"Feel Good"},{"id":"553","color":"#DA4F4E","name":"Sillage"},{"id":"567","color":"#EA5069","name":"Rose en Dior"},{"id":"576","color":"#F08182","name":"Pretty Matte"},{"id":"602","color":"#2E4763","name":"狂想"},{"id":"642","color":"#EA5155","name":"Ready"},{"id":"643","color":"#E84617","name":"Stand Out"},{"id":"652","color":"#ED6C7F","name":"珊瑚"},{"id":"663","color":"#D0546B","name":"Désir"},{"id":"665","color":"#BD5154","name":"Rêvée"},{"id":"678","color":"#CC4A6B","name":"Culte"},{"id":"746","color":"#DC002C","name":"Favorite"},{"id":"756","color":"#E52F31","name":"Panache"},{"id":"766","color":"#CF1D59","name":"Rose Harpers"},{"id":"771","color":"#E96C81","name":"Radiant Matte"},{"id":"772","color":"#CB7A84","name":"Classic Matte"},{"id":"775","color":"#E1244B","name":"Hyde Park"},{"id":"787","color":"#E6699D","name":"Exuberant Matte"},{"id":"789","color":"#96518F","name":"痴迷"},{"id":"844","color":"#E0262E","name":"Trafalgar"},{"id":"856","color":"#B62631","name":"Célèbre"},{"id":"888","color":"#EB5958","name":"Strong Matte"},{"id":"962","color":"#86556D","name":"奇葩"},{"id":"999","color":"#BE020D","name":""},{"id":"999","color":"#CC434D","name":"传奇红唇哑光"}]}]},{"name":"美宝莲","series":[{"name":"绝色持久唇膏绒情哑光","lipsticks":[{"id":"MAT5","color":"#99163A","name":""},{"id":"R45M","color":"#A22040","name":""},{"id":"R41M","color":"#C31431","name":"COLOR SENSATIONAL VIVID MATTE"},{"id":"MAT1","color":"#EC5C80","name":""},{"id":"MAT3","color":"#EC594F","name":""},{"id":"MAT5","color":"#F193AD","name":""}]}]},{"name":"纪梵希","series":[{"name":"高定香榭天鹅绒唇膏(小羊皮)","lipsticks":[{"id":"N103","color":"#DF695F","name":"优雅米色"},{"id":"N103","color":"#C74A52","name":"迷人茶色"},{"id":"N105","color":"#A82A40","name":"阳光小麦"},{"id":"N202","color":"#F43556","name":"幻想玫瑰"},{"id":"N204","color":"#BE2446","name":"樱桃玫瑰"},{"id":"N205","color":"#E70060","name":"加仑玫瑰"},{"id":"N304","color":"#F82131","name":"加州红"},{"id":"N306","color":"#E50036","name":"法式红"},{"id":"N303","color":"#FA054B","name":"珊瑚红"},{"id":"N302","color":"#FB2C60","name":"芭比红"},{"id":"305","color":"#FA013D","name":"缪斯红"},{"id":"201","color":"#FA6173","name":"糖果玫瑰"},{"id":"209","color":"#F60071","name":"明艳玫瑰"},{"id":"210","color":"#FF4D89","name":"大丽玫瑰"},{"id":"315","color":"#AC003A","name":"覆盆子红"},{"id":"317","color":"#E03B35","name":"暖柿红"},{"id":"307","color":"#93142F","name":"石榴红"},{"id":"301","color":"#DF3751","name":"西瓜红"},{"id":"214","color":"#BB3C5A","name":"复古玫瑰"},{"id":"323","color":"#C53057","name":"高雅梅"},{"id":"326","color":"#932844","name":"勃艮第红"},{"id":"327","color":"#9B325A","name":"莓紫红"},{"id":"324","color":"#EE4650","name":"秀场红"},{"id":"325","color":"#E11020","name":"圣水红"},{"id":"215","color":"#844452","name":"橡皮裸肌"},{"id":"329","color":"#731919","name":"红色高跟鞋"},{"id":"330","color":"#64263F","name":"复古提琴"},{"id":"331","color":"#58151E","name":"赤霞珠"}]},{"name":"禁忌之吻霓虹唇膏","lipsticks":[{"id":"11","color":"#BA353C","name":"御姐橘"},{"id":"7","color":"#8B2844","name":"幻想紫"},{"id":"8","color":"#B12252","name":"暗夜莓"},{"id":"9","color":"#DD485B","name":"沉睡红"},{"id":"10","color":"#B53D52","name":"帅T红"},{"id":"12","color":"#B9282D","name":"女巫红"},{"id":"13","color":"#CA292E","name":"禁忌红"},{"id":"14","color":"#CB2D21","name":"鬼魅红"},{"id":"15","color":"#D43A29","name":"夜光橘"},{"id":"16","color":"#DF4541","name":"潮女红"},{"id":"18","color":"#D35C5E","name":"童话粉"},{"id":"22","color":"#EC2663","name":"精灵粉"},{"id":"23","color":"#C62E54","name":"魔女粉"},{"id":"24","color":"#AA2260","name":"傲娇粉"},{"id":"17","color":"#DD5852","name":"乙女粉"},{"id":"19","color":"#E36476","name":"治愈粉"},{"id":"20","color":"#EC6284","name":"萝莉粉"},{"id":"21","color":"#EA586F","name":"元气粉"}]}]}]} -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var minify = require('gulp-minify'); 3 | var jsonminify = require('gulp-jsonminify'); 4 | 5 | gulp.task('js', function() { 6 | gulp.src('src/*.js') 7 | .pipe(minify({ 8 | noSource: true 9 | })) 10 | .pipe(gulp.dest('dist')); 11 | }); 12 | 13 | gulp.task('json', function () { 14 | return gulp.src(['src/lipstick.json']) 15 | .pipe(jsonminify()) 16 | .pipe(gulp.dest('dist')); 17 | }); 18 | 19 | gulp.task('default', ['js', 'json']); 20 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 口红颜色可视化 8 | 9 | 79 | 80 | 81 | 82 |
83 | 84 |
85 |

86 | 87 |

88 |
89 |

90 | # 91 |

92 |
93 | 94 |
95 |

口红颜色可视化

96 | 100 |
101 | 102 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 122 | 123 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lipstick", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Ovilia", 10 | "license": "MIT", 11 | "dependencies": { 12 | "tinycolor2": "^1.4.1", 13 | "zepto": "^1.2.0", 14 | "zrender": "^4.0.3" 15 | }, 16 | "devDependencies": { 17 | "get-pixels": "^3.3.0", 18 | "gulp": "^3.9.1", 19 | "gulp-jsonminify": "^1.1.0", 20 | "gulp-minify": "^2.1.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | var zr = null; 2 | var bgDpi = 0.2; 3 | var zrDpi = 1; 4 | var width = 0; 5 | var height = 0; 6 | var lipstickData = null; 7 | 8 | function init() { 9 | width = Math.floor(window.innerWidth * bgDpi); 10 | height = Math.floor(window.innerHeight * bgDpi); 11 | 12 | var bgDom = document.getElementById('bg'); 13 | bgDom.setAttribute('width', width); 14 | bgDom.setAttribute('height', height); 15 | 16 | var zrDom = document.getElementById('zr'); 17 | zrDom.setAttribute('width', window.innerWidth * zrDpi); 18 | zrDom.setAttribute('height', window.innerHeight * zrDpi); 19 | zr = zrender.init(zrDom); 20 | 21 | $.getJSON('dist/lipstick.json', function (data) { 22 | updateLipstickData(data); 23 | 24 | var minMax = getMinMax(lipstickData); 25 | renderBackground(bgDom, minMax); 26 | renderDataPoints(lipstickData, minMax); 27 | 28 | hover({ target: lipstickData[0].group.childAt(0) }); 29 | updateUi(lipstickData[0]); 30 | document.getElementById('ui').setAttribute('style', 'display:block'); 31 | }); 32 | } 33 | 34 | function updateLipstickData(rawData) { 35 | lipstickData = []; 36 | for (var bid = 0, blen = rawData.brands.length; bid < blen; ++bid) { 37 | var brand = rawData.brands[bid]; 38 | for (var sid = 0, slen = brand.series.length; sid < slen; ++sid) { 39 | var lipsticks = brand.series[sid].lipsticks; 40 | lipstickData = lipstickData.concat(lipsticks); 41 | for (var lid = 0, llen = lipsticks.length; lid < llen; ++lid) { 42 | lipsticks[lid].series = brand.series[sid]; 43 | lipsticks[lid].brand = brand; 44 | } 45 | } 46 | } 47 | } 48 | 49 | function getMinMax(lipstickData) { 50 | var minHue = Number.MAX_VALUE; 51 | var maxHue = Number.MIN_VALUE; 52 | var minLight = Number.MAX_VALUE; 53 | var maxLight = Number.MIN_VALUE; 54 | for (var i = 0; i < lipstickData.length; ++i) { 55 | var hsl = tinycolor(lipstickData[i].color).toHsl(); 56 | hsl.l *= 100; 57 | lipstickData[i]._hsl = hsl; 58 | 59 | var hue = encodeHue(hsl.h); 60 | if (hue < 165 || hue > 220) { 61 | // ignore rare colors 62 | continue; 63 | } 64 | 65 | if (hue > maxHue) { 66 | maxHue = hue; 67 | } 68 | if (hue < minHue) { 69 | minHue = hue; 70 | } 71 | 72 | var light = hsl.l; 73 | if (light > maxLight) { 74 | maxLight = light; 75 | } 76 | if (light < minLight) { 77 | minLight = light; 78 | } 79 | } 80 | return { 81 | minHue: minHue - 2, 82 | maxHue: maxHue + 2, 83 | minLight: Math.max(minLight - 10, 0), 84 | maxLight: Math.min(maxLight + 5, 100) 85 | }; 86 | } 87 | 88 | function renderBackground(bgDom, minMax) { 89 | var ctx = bgDom.getContext('2d'); 90 | var imgData = ctx.createImageData(width, height); 91 | var data = imgData.data; 92 | 93 | for (var y = 0; y < height; ++y) { 94 | for (var x = 0; x < width; ++x) { 95 | var light = (height - y) / height * (minMax.maxLight - minMax.minLight) + minMax.minLight; 96 | var hue = x / width * (minMax.maxHue - minMax.minHue) + minMax.minHue; 97 | var color = tinycolor({ 98 | h: encodeHue(hue), 99 | s: 80, 100 | l: light 101 | }); 102 | var rgb = color.toRgb(); 103 | var id = (y * width + x) * 4; 104 | data[id] = rgb.r; 105 | data[id + 1] = rgb.g; 106 | data[id + 2] = rgb.b; 107 | data[id + 3] = 255; 108 | } 109 | } 110 | ctx.putImageData(imgData, 0, 0); 111 | } 112 | 113 | function renderDataPoints(lipstickData, minMax) { 114 | for (var i = 0; i < lipstickData.length; ++i) { 115 | var coord = getDataCoord(lipstickData[i], minMax); 116 | var pos = [coord.x * zrDpi, coord.y * zrDpi]; 117 | var point = new zrender.Circle({ 118 | shape: { 119 | cx: 0, 120 | cy: 0, 121 | r: 5 122 | }, 123 | style: { 124 | fill: lipstickData[i].color, 125 | stroke: 'rgba(255, 255, 255, 0.8)', 126 | lineWidth: 1 127 | }, 128 | position: pos, 129 | z: 1 130 | }); 131 | 132 | var text = new zrender.Text({ 133 | style: { 134 | text: lipstickData[i].name, 135 | textAlign: 'center', 136 | textVerticalAlign: 'middle', 137 | fontSize: 12, 138 | textFill: 'rgba(255, 255, 255, 0.5)' 139 | }, 140 | position: [pos[0], pos[1] + 16] 141 | }); 142 | 143 | var group = new zrender.Group(); 144 | group.add(point); 145 | group.add(text); 146 | zr.add(group); 147 | 148 | group.lipstick = lipstickData[i]; 149 | group.lipstick.group = group; 150 | } 151 | 152 | zr.on('mousemove', hover); 153 | zr.on('click', function () { 154 | if (!lastEmphasisGroup) { 155 | normal(notNormalGroups); 156 | notNormalGroups = []; 157 | } 158 | }); 159 | } 160 | 161 | var lastEmphasisGroup = null; 162 | var notNormalGroups = []; 163 | function hover(el) { 164 | // unhover last group 165 | if ((!el.target || el.target.parent !== lastEmphasisGroup) && notNormalGroups.length) { 166 | normal(notNormalGroups); 167 | notNormalGroups = []; 168 | } 169 | 170 | if (el.target) { 171 | if (lastEmphasisGroup !== el.target.parent) { 172 | // hover current 173 | var group = el.target.parent; 174 | emphasis(group); 175 | notNormalGroups = [group]; 176 | 177 | var lipstick = group.lipstick; 178 | var siblings = lipstick.series.lipsticks; 179 | 180 | for (var i = 0; i < lipstickData.length; ++i) { 181 | var l = lipstickData[i]; 182 | if (l !== lipstick) { 183 | if (siblings.indexOf(l) > -1) { 184 | relate(l.group); 185 | notNormalGroups.push(l.group); 186 | } 187 | else { 188 | downplay(l.group); 189 | } 190 | } 191 | } 192 | 193 | lastEmphasisGroup = el.target.parent; 194 | } 195 | } 196 | else if (lastEmphasisGroup) { 197 | for (var i = 0; i < lipstickData.length; ++i) { 198 | undownplay(lipstickData[i].group); 199 | } 200 | lastEmphasisGroup = null; 201 | } 202 | } 203 | 204 | function emphasis(group) { 205 | undownplay(group); 206 | 207 | var point = group.childAt(0); 208 | point.attr('z', 11); 209 | point.stopAnimation(true); 210 | point.animateTo({ 211 | shape: { 212 | r: 30 213 | }, 214 | style: { 215 | lineWidth: 3, 216 | stroke: '#fff', 217 | shadowBlur: 20, 218 | shadowColor: 'rgba(0, 0, 0, 0.4)' 219 | } 220 | }, 200, 0, 'bounceOut'); 221 | 222 | var text = group.childAt(1); 223 | text.attr('z', 10); 224 | text.attr('style', { 225 | text: '#' + group.lipstick.id + ' ' + group.lipstick.name, 226 | textPadding: [62, 0, 0, 0] 227 | }); 228 | text.stopAnimation(true); 229 | text.animateTo({ 230 | style: { 231 | textFill: group.lipstick.color, 232 | fontSize: 16, 233 | textStrokeWidth: 3, 234 | textStroke: '#fff' 235 | } 236 | }, 200, 0, 'bounceOut'); 237 | 238 | updateUi(group.lipstick); 239 | } 240 | 241 | function relate(group) { 242 | undownplay(group); 243 | 244 | var point = group.childAt(0); 245 | point.stopAnimation(true); 246 | point.attr('style', { 247 | lineWidth: 2 248 | }); 249 | point.attr('z', 9); 250 | point.attr('shape', { 251 | r: 10 252 | }); 253 | point.animateTo({ 254 | style: { 255 | shadowBlur: 8, 256 | shadowColor: 'rgba(0, 0, 0, 0.2)' 257 | } 258 | }, 200, 0, 'bounceOut'); 259 | 260 | var text = group.childAt(1); 261 | text.attr('style', { 262 | text: '#' + group.lipstick.id + ' ' + group.lipstick.name, 263 | textPadding: [12, 0, 0, 0] 264 | }); 265 | text.attr('z', 8); 266 | text.stopAnimation(true); 267 | text.animateTo({ 268 | style: { 269 | textFill: group.lipstick.color, 270 | textStrokeWidth: 2, 271 | textStroke: 'rgba(255, 255, 255, 0.75)' 272 | } 273 | }, 200, 0, 'bounceOut'); 274 | } 275 | 276 | function normal(groups) { 277 | for (var i = 0; i < groups.length; ++i) { 278 | var point = groups[i].childAt(0); 279 | point.attr('z', 1); 280 | point.stopAnimation(true); 281 | point.animateTo({ 282 | shape: { 283 | r: 5 284 | }, 285 | style: { 286 | stroke: 'rgba(255, 255, 255, 0.8)', 287 | lineWidth: 1, 288 | shadowBlur: 0 289 | } 290 | }, 200, 0, 'linear'); 291 | 292 | var text = groups[i].childAt(1); 293 | text.stopAnimation(true); 294 | text.attr('style', { 295 | text: groups[i].lipstick.name, 296 | textPadding: 0 297 | }); 298 | text.attr('z', 0); 299 | text.animateTo({ 300 | style: { 301 | fontSize: 12, 302 | textStrokeWidth: 0, 303 | textShadowBlur: 0, 304 | textFill: 'rgba(255, 255, 255, 0.5)' 305 | } 306 | }, 200, 0, 'linear'); 307 | } 308 | } 309 | 310 | function downplay(group) { 311 | var point = group.childAt(0); 312 | point.stopAnimation(true); 313 | point.animateTo({ 314 | style: { 315 | opacity: 0.6 316 | } 317 | }, 200, 0, 'linear'); 318 | 319 | var text = group.childAt(1); 320 | text.stopAnimation(true); 321 | text.animateTo({ 322 | style: { 323 | opacity: 0 324 | } 325 | }, 200, 0, 'linear'); 326 | } 327 | 328 | function undownplay(group) { 329 | var point = group.childAt(0); 330 | point.stopAnimation(true); 331 | point.animateTo({ 332 | style: { 333 | opacity: 1 334 | } 335 | }, 200, 0, 'linear'); 336 | 337 | var text = group.childAt(1); 338 | text.stopAnimation(true); 339 | text.animateTo({ 340 | style: { 341 | opacity: 1 342 | } 343 | }, 200, 0, 'linear'); 344 | } 345 | 346 | function getDataCoord(data, minMax) { 347 | var hue = encodeHue(data._hsl.h); 348 | var light = data._hsl.l; 349 | return { 350 | x: (hue - minMax.minHue) * width / (minMax.maxHue - minMax.minHue) / bgDpi, 351 | y: height / bgDpi - (light - minMax.minLight) * height / (minMax.maxLight - minMax.minLight) / bgDpi 352 | }; 353 | } 354 | 355 | /** 356 | * convert red hue to be around 0.5 357 | */ 358 | function encodeHue(hue) { 359 | if (hue < 180) { 360 | return 180 - hue; 361 | } 362 | else { 363 | return 540 - hue; 364 | } 365 | } 366 | 367 | function updateUi(lipstick) { 368 | document.getElementById('brand-name').innerText = lipstick.brand.name; 369 | document.getElementById('series-name').innerText = lipstick.series.name; 370 | document.getElementById('lipstick-id').innerText = lipstick.id; 371 | document.getElementById('lipstick-name').innerText = lipstick.name; 372 | document.getElementById('lipstick-info').setAttribute('style', 'color:' + lipstick.color); 373 | 374 | var seriesColors = document.getElementById('series-colors'); 375 | seriesColors.innerText = ''; 376 | 377 | var siblings = lipstick.series.lipsticks; 378 | for (var i = 0; i < siblings.length; ++i) { 379 | var el = document.createElement('div'); 380 | el.setAttribute('style', 'background-color:' + siblings[i].color); 381 | 382 | var className = siblings[i] === lipstick ? 'series-color active' : 'series-color'; 383 | el.setAttribute('class', className); 384 | seriesColors.appendChild(el); 385 | } 386 | } 387 | -------------------------------------------------------------------------------- /src/lipstick.json: -------------------------------------------------------------------------------- 1 | { 2 | "brands": [{ 3 | "name": "圣罗兰", 4 | "series": [{ 5 | "name": "莹亮纯魅唇膏", 6 | "lipsticks": [{ 7 | "color": "#D62352", 8 | "id": "49", 9 | "name": "撩骚" 10 | }, { 11 | "color": "#DC4B41", 12 | "id": "14", 13 | "name": "一见倾心" 14 | }, { 15 | "color": "#B22146", 16 | "id": "05", 17 | "name": "浮生若梦" 18 | }, { 19 | "color": "#A25356", 20 | "id": "08", 21 | "name": "纯真梦幻" 22 | }, { 23 | "color": "#DF3443", 24 | "id": "12", 25 | "name": "红粉派对" 26 | }, { 27 | "color": "#E06C68", 28 | "id": "15", 29 | "name": "珊瑚恋人" 30 | }, { 31 | "color": "#842C71", 32 | "id": "19", 33 | "name": "华丽转身" 34 | }, { 35 | "color": "#D13C4F", 36 | "id": "43", 37 | "name": "唇印" 38 | }, { 39 | "color": "#B71D32", 40 | "id": "04", 41 | "name": "危情禁果" 42 | }, { 43 | "color": "#DE2361", 44 | "id": "06", 45 | "name": "情窦初开" 46 | }, { 47 | "color": "#B05856", 48 | "id": "09", 49 | "name": "裸色暗恋" 50 | }, { 51 | "color": "#E06F70", 52 | "id": "13", 53 | "name": "邂逅巴黎" 54 | }, { 55 | "color": "#CD4143", 56 | "id": "16", 57 | "name": "糖果女孩" 58 | }, { 59 | "color": "#EC6A70", 60 | "id": "41", 61 | "name": "告白" 62 | }, { 63 | "color": "#EFE9DE", 64 | "id": "42", 65 | "name": "初恋" 66 | }, { 67 | "color": "#C60F2F", 68 | "id": "45", 69 | "name": "拥吻" 70 | }, { 71 | "color": "#BB6868", 72 | "id": "47", 73 | "name": "心跳" 74 | }, { 75 | "color": "#E0186B", 76 | "id": "50", 77 | "name": "约定" 78 | }, { 79 | "color": "#D45E85", 80 | "id": "52", 81 | "name": "游戏" 82 | }, { 83 | "color": "#C16E6F", 84 | "id": "44", 85 | "name": "意外" 86 | }, { 87 | "color": "#D1121B", 88 | "id": "46", 89 | "name": "钟情" 90 | }, { 91 | "color": "#8E243E", 92 | "id": "48", 93 | "name": "夜色" 94 | }, { 95 | "color": "#EE7486", 96 | "id": "51", 97 | "name": "私语" 98 | }] 99 | }, { 100 | "name": "纯口红", 101 | "lipsticks": [ 102 | { 103 | "id": "19", 104 | "color": "#B13C79", 105 | "name": "玫红色" 106 | }, 107 | { 108 | "id": "13", 109 | "color": "#BB1813", 110 | "name": "正橘色" 111 | }, 112 | { 113 | "id": "52", 114 | "color": "#EA4E59", 115 | "name": "星星色" 116 | }, 117 | { 118 | "id": "01", 119 | "color": "#B8122B", 120 | "name": "正红色" 121 | }, 122 | { 123 | "id": "17", 124 | "color": "#F75E70", 125 | "name": "嫣粉纱丽" 126 | }, 127 | { 128 | "id": "07", 129 | "color": "#CB2276", 130 | "name": "雅紫纱蓉" 131 | }, 132 | { 133 | "id": "09", 134 | "color": "#C27482", 135 | "name": "绛紫丝绒" 136 | }, 137 | { 138 | "id": "11", 139 | "color": "#C06B72", 140 | "name": "藕粉云罗" 141 | }, 142 | { 143 | "id": "16", 144 | "color": "#BB444A", 145 | "name": "绯红香缎" 146 | }, 147 | { 148 | "id": "22", 149 | "color": "#E86E9F", 150 | "name": "莹亮裸粉" 151 | }, 152 | { 153 | "id": "23", 154 | "color": "#DE6F5C", 155 | "name": "杏色府绸" 156 | }, 157 | { 158 | "id": "26", 159 | "color": "#CC6D84", 160 | "name": "堇色流纱" 161 | }, 162 | { 163 | "id": "36", 164 | "color": "#ED695D", 165 | "name": "珊瑚雪纺" 166 | }, 167 | { 168 | "id": "49", 169 | "color": "#DC4D8D", 170 | "name": "想你色" 171 | }, 172 | { 173 | "id": "51", 174 | "color": "#FA6C55", 175 | "name": "莹亮珊瑚橙" 176 | }, 177 | { 178 | "id": "56", 179 | "color": "#D9100E", 180 | "name": "橙红织锦" 181 | }, 182 | { 183 | "id": "59", 184 | "color": "#B96463", 185 | "name": "裸色薄纱" 186 | }, 187 | { 188 | "id": "207", 189 | "color": "#CA4061", 190 | "name": "珊瑚柚" 191 | }, 192 | { 193 | "id": "208", 194 | "color": "#D60846", 195 | "name": "玫红色" 196 | }, 197 | { 198 | "id": "27", 199 | "color": "#D24379", 200 | "name": "纯真玫红" 201 | }, 202 | { 203 | "id": "50", 204 | "color": "#DC2923", 205 | "name": "前卫霓红" 206 | }, 207 | { 208 | "id": "57", 209 | "color": "#C7153D", 210 | "name": "明亮裸唇" 211 | }, 212 | { 213 | "id": "58", 214 | "color": "#B25D84", 215 | "name": "明亮淡紫" 216 | }, 217 | { 218 | "id": "201", 219 | "color": "#B01020", 220 | "name": "红唇印象" 221 | }, 222 | { 223 | "id": "202", 224 | "color": "#9E2C2C", 225 | "name": "疯狂玫瑰" 226 | }, 227 | { 228 | "id": "203", 229 | "color": "#940220", 230 | "name": "摇滚红唇" 231 | }, 232 | { 233 | "id": "205", 234 | "color": "#550001", 235 | "name": "天然浆果" 236 | }, 237 | { 238 | "id": "72", 239 | "color": "#9A1B2F", 240 | "name": "" 241 | }, 242 | { 243 | "id": "73", 244 | "color": "#CF0410", 245 | "name": "" 246 | }, 247 | { 248 | "id": "74", 249 | "color": "#E0291B", 250 | "name": "" 251 | }, 252 | { 253 | "id": "211", 254 | "color": "#E4004F", 255 | "name": "DECADENT" 256 | }, 257 | { 258 | "id": "212", 259 | "color": "#A53B4F", 260 | "name": "ALTERNATIVEPLUM" 261 | }, 262 | { 263 | "id": "213", 264 | "color": "#E94138", 265 | "name": "ORANGE SEVENTIES" 266 | }, 267 | { 268 | "id": "215", 269 | "color": "#E34E90", 270 | "name": "LUST FOR PINK" 271 | }, 272 | { 273 | "id": "216", 274 | "color": "#DE455A", 275 | "name": "RED CLASH" 276 | }, 277 | { 278 | "id": "217", 279 | "color": "#DE455A", 280 | "name": "NUDE TROUBLE" 281 | } 282 | ] 283 | }, { 284 | "name": "莹亮纯魅美唇膏", 285 | "lipsticks": [ 286 | { 287 | "id": "11", 288 | "color": "#D51768", 289 | "name": "玫色游戏" 290 | }, 291 | { 292 | "id": "3", 293 | "color": "#F18885", 294 | "name": "玫瑰轻语" 295 | }, 296 | { 297 | "id": "8", 298 | "color": "#E52322", 299 | "name": "橙色放纵" 300 | }, 301 | { 302 | "id": "4", 303 | "color": "#DA0140", 304 | "name": "桃红欲望" 305 | }, 306 | { 307 | "id": "1", 308 | "color": "#C05B60", 309 | "name": "裸色幻想" 310 | }, 311 | { 312 | "id": "2", 313 | "color": "#E87593", 314 | "name": "粉色嬉戏" 315 | }, 316 | { 317 | "id": "5", 318 | "color": "#630F28", 319 | "name": "梅色撩拨" 320 | }, 321 | { 322 | "id": "6", 323 | "color": "#CC0824", 324 | "name": "红色触碰" 325 | }, 326 | { 327 | "id": "7", 328 | "color": "#ED6D68", 329 | "name": "珊瑚挑逗" 330 | }, 331 | { 332 | "id": "9", 333 | "color": "#E73458", 334 | "name": "粉色纵情" 335 | }, 336 | { 337 | "id": "10", 338 | "color": "#A00F30", 339 | "name": "绯红诱惑" 340 | }, 341 | { 342 | "id": "12", 343 | "color": "#B81D3D", 344 | "name": "苺色暧昧" 345 | } 346 | ] 347 | }, { 348 | "name": "纯色唇釉叛逆裸唇", 349 | "lipsticks": [ 350 | { 351 | "id": "12", 352 | "color": "#D0011E", 353 | "name": "红绯" 354 | }, 355 | { 356 | "id": "46", 357 | "color": "#9F182C", 358 | "name": "深红色" 359 | }, 360 | { 361 | "id": "50", 362 | "color": "#C64E5B", 363 | "name": "自然珊瑚" 364 | }, 365 | { 366 | "id": "08", 367 | "color": "#C41304", 368 | "name": "唐橘" 369 | }, 370 | { 371 | "id": "07", 372 | "color": "#CC2010", 373 | "name": "蜜柚" 374 | }, 375 | { 376 | "id": "09", 377 | "color": "#D4020E", 378 | "name": "红釉" 379 | }, 380 | { 381 | "id": "11", 382 | "color": "#D0010B", 383 | "name": "洋红" 384 | }, 385 | { 386 | "id": "13", 387 | "color": "#CC030E", 388 | "name": "茜色" 389 | }, 390 | { 391 | "id": "15", 392 | "color": "#D41B40", 393 | "name": "桃红" 394 | }, 395 | { 396 | "id": "42", 397 | "color": "#DF294E", 398 | "name": "风情橘红" 399 | }, 400 | { 401 | "id": "43", 402 | "color": "#E23E44", 403 | "name": "玫瑰歌谣" 404 | }, 405 | { 406 | "id": "47", 407 | "color": "#BC3250", 408 | "name": "桃红色" 409 | }, 410 | { 411 | "id": "48", 412 | "color": "#C13E30", 413 | "name": "橙色" 414 | }, 415 | { 416 | "id": "49", 417 | "color": "#BB325C", 418 | "name": "梅子色" 419 | }, 420 | { 421 | "id": "51", 422 | "color": "#951E53", 423 | "name": "玫红色" 424 | }, 425 | { 426 | "id": "200", 427 | "color": "#DC9F8F", 428 | "name": "丰唇唇釉" 429 | } 430 | ] 431 | }, { 432 | "name": "莹亮绚染唇油", 433 | "lipsticks": [ 434 | { 435 | "id": "05", 436 | "color": "#FF54A3", 437 | "name": "樱桃情人" 438 | }, 439 | { 440 | "id": "04", 441 | "color": "#FF725D", 442 | "name": "粉恋玫瑰" 443 | }, 444 | { 445 | "id": "06", 446 | "color": "#C072B5", 447 | "name": "蜜桃热恋" 448 | }, 449 | { 450 | "id": "07", 451 | "color": "#FFD0DD", 452 | "name": "橙色邂逅" 453 | }, 454 | { 455 | "id": "08", 456 | "color": "#FF7B1E", 457 | "name": "粉色憧憬" 458 | } 459 | ] 460 | }, { 461 | "name": "甜吻唇颊霜", 462 | "lipsticks": [ 463 | { 464 | "id": "05", 465 | "color": "#E21949", 466 | "name": "洋红色" 467 | }, 468 | { 469 | "id": "01", 470 | "color": "#DD2269", 471 | "name": "玫红色" 472 | }, 473 | { 474 | "id": "02", 475 | "color": "#E05572", 476 | "name": "樱花粉" 477 | }, 478 | { 479 | "id": "03", 480 | "color": "#D16479", 481 | "name": "裸粉色" 482 | }, 483 | { 484 | "id": "04", 485 | "color": "#DF4A43", 486 | "name": "亮橘色" 487 | }, 488 | { 489 | "id": "07", 490 | "color": "#DC6B5D", 491 | "name": "珊瑚橙" 492 | }, 493 | { 494 | "id": "08", 495 | "color": "#DE6A78", 496 | "name": "珊瑚粉" 497 | }, 498 | { 499 | "id": "09", 500 | "color": "#BF7083", 501 | "name": "珊瑚柚" 502 | }, 503 | { 504 | "id": "12", 505 | "color": "#AD625E", 506 | "name": "摩卡色" 507 | } 508 | ] 509 | }, { 510 | "name": "莹亮灿金唇彩", 511 | "lipsticks": [ 512 | { 513 | "id": "49", 514 | "color": "#D03370", 515 | "name": "骚动" 516 | }, 517 | { 518 | "id": "207", 519 | "color": "#D11746", 520 | "name": "激情" 521 | }, 522 | { 523 | "id": "03", 524 | "color": "#D34E59", 525 | "name": "憧憬" 526 | }, 527 | { 528 | "id": "15", 529 | "color": "#AB3B48", 530 | "name": "突然" 531 | }, 532 | { 533 | "id": "30", 534 | "color": "#DD6053", 535 | "name": "甜蜜" 536 | }, 537 | { 538 | "id": "203", 539 | "color": "#FE645A", 540 | "name": "心跳" 541 | }, 542 | { 543 | "id": "204", 544 | "color": "#FE5B56", 545 | "name": "意外" 546 | }, 547 | { 548 | "id": "206", 549 | "color": "#B80722", 550 | "name": "炙热" 551 | } 552 | ] 553 | }] 554 | }, { 555 | "name": "香奈儿可可小姐", 556 | "series": [{ 557 | "name": "唇膏水亮", 558 | "lipsticks": [ 559 | { 560 | "id": "69", 561 | "color": "#F17365", 562 | "name": "传情" 563 | }, 564 | { 565 | "id": "46", 566 | "color": "#E87268", 567 | "name": "自由" 568 | }, 569 | { 570 | "id": "122", 571 | "color": "#EA4D4A", 572 | "name": "CORAIL RADIEUX" 573 | }, 574 | { 575 | "id": "97", 576 | "color": "#D53D49", 577 | "name": "洒脱" 578 | }, 579 | { 580 | "id": "44", 581 | "color": "#FD4334", 582 | "name": "水漾纱丽" 583 | }, 584 | { 585 | "id": "507", 586 | "color": "#E94648", 587 | "name": "倔强" 588 | }, 589 | { 590 | "id": "114", 591 | "color": "#FF3220", 592 | "name": "SHIPSHAPE" 593 | }, 594 | { 595 | "id": "91", 596 | "color": "#C12A33", 597 | "name": "波希米亚" 598 | }, 599 | { 600 | "id": "84", 601 | "color": "#CE1220", 602 | "name": "对白" 603 | }, 604 | { 605 | "id": "57", 606 | "color": "#EB6F79", 607 | "name": "冒险" 608 | }, 609 | { 610 | "id": "116", 611 | "color": "#EC5193", 612 | "name": "MIGHTY" 613 | }, 614 | { 615 | "id": "54", 616 | "color": "#D1918D", 617 | "name": "卡柏男孩" 618 | }, 619 | { 620 | "id": "79", 621 | "color": "#E86A75", 622 | "name": "传奇" 623 | }, 624 | { 625 | "id": "497", 626 | "color": "#ED5A5E", 627 | "name": "勇敢" 628 | }, 629 | { 630 | "id": "132", 631 | "color": "#E93A5B", 632 | "name": "ROSE RAVISSANT" 633 | }, 634 | { 635 | "id": "87", 636 | "color": "#F8657F", 637 | "name": "约会" 638 | }, 639 | { 640 | "id": "55", 641 | "color": "#F14C77", 642 | "name": "浪漫爱情" 643 | }, 644 | { 645 | "id": "118", 646 | "color": "#EB2755", 647 | "name": "ENERGY" 648 | }, 649 | { 650 | "id": "62", 651 | "color": "#E12948", 652 | "name": "蒙特卡罗" 653 | }, 654 | { 655 | "id": "134", 656 | "color": "#E7394A", 657 | "name": "RENOUVEAU" 658 | }, 659 | { 660 | "id": "98", 661 | "color": "#CC4D68", 662 | "name": "率真" 663 | }, 664 | { 665 | "id": "60", 666 | "color": "#BB395F", 667 | "name": "安蒂岗妮" 668 | }, 669 | { 670 | "id": "61", 671 | "color": "#C54463", 672 | "name": "幸福时光" 673 | } 674 | ] 675 | }, { 676 | "name": "炫亮魅力唇膏", 677 | "lipsticks": [ 678 | { 679 | "id": "90", 680 | "color": "#FC6E48", 681 | "name": "活泼" 682 | }, 683 | { 684 | "id": "96", 685 | "color": "#FA421C", 686 | "name": "古灵精怪" 687 | }, 688 | { 689 | "id": "182", 690 | "color": "#E02E20", 691 | "name": "VIBRANTE" 692 | }, 693 | { 694 | "id": "152", 695 | "color": "#E82F2C", 696 | "name": "隐约" 697 | }, 698 | { 699 | "id": "172", 700 | "color": "#E40021", 701 | "name": "ROUGE REBELLE" 702 | }, 703 | { 704 | "id": "135", 705 | "color": "#99413D", 706 | "name": "谜情" 707 | }, 708 | { 709 | "id": "99", 710 | "color": "#8A010D", 711 | "name": "海盗" 712 | }, 713 | { 714 | "id": "176", 715 | "color": "#A80D1F", 716 | "name": "INDÉPENDANTE" 717 | }, 718 | { 719 | "id": "169", 720 | "color": "#8E2622", 721 | "name": "ROUGE TENTATION" 722 | }, 723 | { 724 | "id": "91", 725 | "color": "#E45661", 726 | "name": "吸引力" 727 | }, 728 | { 729 | "id": "179", 730 | "color": "#ED6160", 731 | "name": "LUMINOUS" 732 | }, 733 | { 734 | "id": "94", 735 | "color": "#FC3E6E", 736 | "name": "着迷" 737 | }, 738 | { 739 | "id": "138", 740 | "color": "#D93E5E", 741 | "name": "激昂" 742 | }, 743 | { 744 | "id": "136", 745 | "color": "#EF4246", 746 | "name": "悠扬" 747 | }, 748 | { 749 | "id": "178", 750 | "color": "#BF5363", 751 | "name": "NEW PRODIGIOUS" 752 | }, 753 | { 754 | "id": "158", 755 | "color": "#B24957", 756 | "name": "VIREVOLTANTE" 757 | }, 758 | { 759 | "id": "93", 760 | "color": "#CD0043", 761 | "name": "兴奋" 762 | }, 763 | { 764 | "id": "165", 765 | "color": "#C82C40", 766 | "name": "ÉBLOUISSANTE" 767 | }, 768 | { 769 | "id": "184", 770 | "color": "#C80F2E", 771 | "name": "INCANTEVOLE" 772 | }, 773 | { 774 | "id": "102", 775 | "color": "#B20032", 776 | "name": "悸动" 777 | } 778 | ] 779 | }, { 780 | "name": "炫亮魅力唇膏", 781 | "lipsticks": [ 782 | { 783 | "id": "90", 784 | "color": "#E1527E", 785 | "name": "IMAGINATION" 786 | } 787 | ] 788 | }, { 789 | "name": "炫亮魅力唇膏丝绒", 790 | "lipsticks": [ 791 | { 792 | "id": "65", 793 | "color": "#E17062", 794 | "name": "L'ARISTOCRATICA" 795 | }, 796 | { 797 | "id": "64", 798 | "color": "#E84632", 799 | "name": "FIRST LIGHT" 800 | }, 801 | { 802 | "id": "57", 803 | "color": "#BE2B24", 804 | "name": "ROUGE FEU" 805 | }, 806 | { 807 | "id": "66", 808 | "color": "#E1112A", 809 | "name": "L'INDOMABILE" 810 | }, 811 | { 812 | "id": "51", 813 | "color": "#9E333D", 814 | "name": "震撼" 815 | }, 816 | { 817 | "id": "56", 818 | "color": "#B23030", 819 | "name": "ROUGE CHARNEL" 820 | }, 821 | { 822 | "id": "38", 823 | "color": "#892833", 824 | "name": "迷惑" 825 | }, 826 | { 827 | "id": "58", 828 | "color": "#822E2E", 829 | "name": "ROUGE VIE" 830 | }, 831 | { 832 | "id": "63", 833 | "color": "#802932", 834 | "name": "NIGHTFALL" 835 | }, 836 | { 837 | "id": "61", 838 | "color": "#EC7879", 839 | "name": "LA SECRÈTE" 840 | }, 841 | { 842 | "id": "42", 843 | "color": "#FE697F", 844 | "name": "显眼" 845 | }, 846 | { 847 | "id": "43", 848 | "color": "#FA5059", 849 | "name": "亲爱" 850 | }, 851 | { 852 | "id": "46", 853 | "color": "#C92D38", 854 | "name": "慧黠" 855 | }, 856 | { 857 | "id": "37", 858 | "color": "#C43759", 859 | "name": "纵情" 860 | }, 861 | { 862 | "id": "44", 863 | "color": "#F06FA5", 864 | "name": "歌剧名伶" 865 | }, 866 | { 867 | "id": "50", 868 | "color": "#9F2F56", 869 | "name": "浪漫幻想" 870 | } 871 | ] 872 | }] 873 | }, { 874 | "name": "迪奥", 875 | "series": [{ 876 | "name": "魅惑釉唇膏", 877 | "lipsticks": [ 878 | { 879 | "id": "457", 880 | "color": "#EB636B", 881 | "name": "鸡尾酒" 882 | }, 883 | { 884 | "id": "487", 885 | "color": "#EB5C97", 886 | "name": "泡泡堂" 887 | }, 888 | { 889 | "id": "550", 890 | "color": "#E47082", 891 | "name": "小心计" 892 | }, 893 | { 894 | "id": "554", 895 | "color": "#EA5344", 896 | "name": "日光浴" 897 | }, 898 | { 899 | "id": "564", 900 | "color": "#E94858", 901 | "name": "购物狂" 902 | }, 903 | { 904 | "id": "577", 905 | "color": "#C86378", 906 | "name": "混日子" 907 | }, 908 | { 909 | "id": "637", 910 | "color": "#E74218", 911 | "name": "热点" 912 | }, 913 | { 914 | "id": "644", 915 | "color": "#EA5331", 916 | "name": "生存游戏" 917 | }, 918 | { 919 | "id": "684", 920 | "color": "#E60860", 921 | "name": "人生赢家" 922 | }, 923 | { 924 | "id": "740", 925 | "color": "#902216", 926 | "name": "可乐部" 927 | }, 928 | { 929 | "id": "744", 930 | "color": "#E51E1B", 931 | "name": "花蝴蝶" 932 | }, 933 | { 934 | "id": "794", 935 | "color": "#95358C", 936 | "name": "天生玩家" 937 | }, 938 | { 939 | "id": "857", 940 | "color": "#A01314", 941 | "name": "好莱坞大咖" 942 | }, 943 | { 944 | "id": "867", 945 | "color": "#901A32", 946 | "name": "红酒" 947 | }, 948 | { 949 | "id": "877", 950 | "color": "#C4032B", 951 | "name": "给我迪奥" 952 | }, 953 | { 954 | "id": "882", 955 | "color": "#BB0E63", 956 | "name": "野蛮女友" 957 | }, 958 | { 959 | "id": "904", 960 | "color": "#391E1D", 961 | "name": "黑咖啡" 962 | }, 963 | { 964 | "id": "924", 965 | "color": "#602227", 966 | "name": "不羁" 967 | } 968 | ] 969 | }, { 970 | "name": "魅惑染唇蜜", 971 | "lipsticks": [ 972 | { 973 | "id": "351", 974 | "color": "#D8707D", 975 | "name": "魅惑染唇蜜" 976 | }, 977 | { 978 | "id": "421", 979 | "color": "#AD5F56", 980 | "name": "魅惑染唇蜜" 981 | }, 982 | { 983 | "id": "451", 984 | "color": "#E55461", 985 | "name": "Natural Coral" 986 | }, 987 | { 988 | "id": "491", 989 | "color": "#A76165", 990 | "name": "魅惑染唇蜜" 991 | }, 992 | { 993 | "id": "761", 994 | "color": "#E13D5D", 995 | "name": "Natural Cherry" 996 | }, 997 | { 998 | "id": "771", 999 | "color": "#974249", 1000 | "name": "Natural Berry" 1001 | }, 1002 | { 1003 | "id": "881", 1004 | "color": "#EC6292", 1005 | "name": "Natural Pink" 1006 | } 1007 | ] 1008 | }, { 1009 | "name": "烈艳蓝金唇膏", 1010 | "lipsticks": [ 1011 | { 1012 | "id": "028", 1013 | "color": "#E83F4A", 1014 | "name": "Actrice" 1015 | }, 1016 | { 1017 | "id": "426", 1018 | "color": "#D58F7F", 1019 | "name": "" 1020 | }, 1021 | { 1022 | "id": "481", 1023 | "color": "#B76566", 1024 | "name": "" 1025 | }, 1026 | { 1027 | "id": "047", 1028 | "color": "#E40068", 1029 | "name": "迪奥小姐" 1030 | }, 1031 | { 1032 | "id": "781", 1033 | "color": "#833B43", 1034 | "name": "" 1035 | }, 1036 | { 1037 | "id": "060", 1038 | "color": "#D36179", 1039 | "name": "首映礼" 1040 | }, 1041 | { 1042 | "id": "080", 1043 | "color": "#D91820", 1044 | "name": "微笑正红" 1045 | }, 1046 | { 1047 | "id": "861", 1048 | "color": "#B52237", 1049 | "name": "" 1050 | }, 1051 | { 1052 | "id": "996", 1053 | "color": "#BD7376", 1054 | "name": "" 1055 | }, 1056 | { 1057 | "id": "999", 1058 | "color": "#A82628", 1059 | "name": "" 1060 | }, 1061 | { 1062 | "id": "999", 1063 | "color": "#A82628", 1064 | "name": "Metallic" 1065 | }, 1066 | { 1067 | "id": "207", 1068 | "color": "#BBC3C2", 1069 | "name": "蒙田灰" 1070 | }, 1071 | { 1072 | "id": "277", 1073 | "color": "#DB7096", 1074 | "name": "Osée" 1075 | }, 1076 | { 1077 | "id": "343", 1078 | "color": "#EF7C6B", 1079 | "name": "Panaréa" 1080 | }, 1081 | { 1082 | "id": "351", 1083 | "color": "#E46177", 1084 | "name": "Dansante" 1085 | }, 1086 | { 1087 | "id": "459", 1088 | "color": "#D1546E", 1089 | "name": "Charnelle" 1090 | }, 1091 | { 1092 | "id": "520", 1093 | "color": "#E4003E", 1094 | "name": "Feel Good" 1095 | }, 1096 | { 1097 | "id": "553", 1098 | "color": "#DA4F4E", 1099 | "name": "Sillage" 1100 | }, 1101 | { 1102 | "id": "567", 1103 | "color": "#EA5069", 1104 | "name": "Rose en Dior" 1105 | }, 1106 | { 1107 | "id": "576", 1108 | "color": "#F08182", 1109 | "name": "Pretty Matte" 1110 | }, 1111 | { 1112 | "id": "602", 1113 | "color": "#2E4763", 1114 | "name": "狂想" 1115 | }, 1116 | { 1117 | "id": "642", 1118 | "color": "#EA5155", 1119 | "name": "Ready" 1120 | }, 1121 | { 1122 | "id": "643", 1123 | "color": "#E84617", 1124 | "name": "Stand Out" 1125 | }, 1126 | { 1127 | "id": "652", 1128 | "color": "#ED6C7F", 1129 | "name": "珊瑚" 1130 | }, 1131 | { 1132 | "id": "663", 1133 | "color": "#D0546B", 1134 | "name": "Désir" 1135 | }, 1136 | { 1137 | "id": "665", 1138 | "color": "#BD5154", 1139 | "name": "Rêvée" 1140 | }, 1141 | { 1142 | "id": "678", 1143 | "color": "#CC4A6B", 1144 | "name": "Culte" 1145 | }, 1146 | { 1147 | "id": "746", 1148 | "color": "#DC002C", 1149 | "name": "Favorite" 1150 | }, 1151 | { 1152 | "id": "756", 1153 | "color": "#E52F31", 1154 | "name": "Panache" 1155 | }, 1156 | { 1157 | "id": "766", 1158 | "color": "#CF1D59", 1159 | "name": "Rose Harpers" 1160 | }, 1161 | { 1162 | "id": "771", 1163 | "color": "#E96C81", 1164 | "name": "Radiant Matte" 1165 | }, 1166 | { 1167 | "id": "772", 1168 | "color": "#CB7A84", 1169 | "name": "Classic Matte" 1170 | }, 1171 | { 1172 | "id": "775", 1173 | "color": "#E1244B", 1174 | "name": "Hyde Park" 1175 | }, 1176 | { 1177 | "id": "787", 1178 | "color": "#E6699D", 1179 | "name": "Exuberant Matte" 1180 | }, 1181 | { 1182 | "id": "789", 1183 | "color": "#96518F", 1184 | "name": "痴迷" 1185 | }, 1186 | { 1187 | "id": "844", 1188 | "color": "#E0262E", 1189 | "name": "Trafalgar" 1190 | }, 1191 | { 1192 | "id": "856", 1193 | "color": "#B62631", 1194 | "name": "Célèbre" 1195 | }, 1196 | { 1197 | "id": "888", 1198 | "color": "#EB5958", 1199 | "name": "Strong Matte" 1200 | }, 1201 | { 1202 | "id": "962", 1203 | "color": "#86556D", 1204 | "name": "奇葩" 1205 | }, 1206 | { 1207 | "id": "999", 1208 | "color": "#BE020D", 1209 | "name": "" 1210 | }, 1211 | { 1212 | "id": "999", 1213 | "color": "#CC434D", 1214 | "name": "传奇红唇哑光" 1215 | } 1216 | ] 1217 | }] 1218 | }, { 1219 | "name": "美宝莲", 1220 | "series": [ 1221 | { 1222 | "name": "绝色持久唇膏绒情哑光", 1223 | "lipsticks": [ 1224 | { 1225 | "id": "MAT5", 1226 | "color": "#99163A", 1227 | "name": "" 1228 | }, 1229 | { 1230 | "id": "R45M", 1231 | "color": "#A22040", 1232 | "name": "" 1233 | }, 1234 | { 1235 | "id": "R41M", 1236 | "color": "#C31431", 1237 | "name": "COLOR SENSATIONAL VIVID MATTE" 1238 | }, 1239 | { 1240 | "id": "MAT1", 1241 | "color": "#EC5C80", 1242 | "name": "" 1243 | }, 1244 | { 1245 | "id": "MAT3", 1246 | "color": "#EC594F", 1247 | "name": "" 1248 | }, 1249 | { 1250 | "id": "MAT5", 1251 | "color": "#F193AD", 1252 | "name": "" 1253 | } 1254 | ] 1255 | } 1256 | ] 1257 | }, { 1258 | "name": "纪梵希", 1259 | "series": [ 1260 | { 1261 | "name": "高定香榭天鹅绒唇膏(小羊皮)", 1262 | "lipsticks": [ 1263 | { 1264 | "id": "N103", 1265 | "color": "#DF695F", 1266 | "name": "优雅米色" 1267 | }, 1268 | { 1269 | "id": "N103", 1270 | "color": "#C74A52", 1271 | "name": "迷人茶色" 1272 | }, 1273 | { 1274 | "id": "N105", 1275 | "color": "#A82A40", 1276 | "name": "阳光小麦" 1277 | }, 1278 | { 1279 | "id": "N202", 1280 | "color": "#F43556", 1281 | "name": "幻想玫瑰" 1282 | }, 1283 | { 1284 | "id": "N204", 1285 | "color": "#BE2446", 1286 | "name": "樱桃玫瑰" 1287 | }, 1288 | { 1289 | "id": "N205", 1290 | "color": "#E70060", 1291 | "name": "加仑玫瑰" 1292 | }, 1293 | { 1294 | "id": "N304", 1295 | "color": "#F82131", 1296 | "name": "加州红" 1297 | }, 1298 | { 1299 | "id": "N306", 1300 | "color": "#E50036", 1301 | "name": "法式红" 1302 | }, 1303 | { 1304 | "id": "N303", 1305 | "color": "#FA054B", 1306 | "name": "珊瑚红" 1307 | }, 1308 | { 1309 | "id": "N302", 1310 | "color": "#FB2C60", 1311 | "name": "芭比红" 1312 | }, 1313 | { 1314 | "id": "305", 1315 | "color": "#FA013D", 1316 | "name": "缪斯红" 1317 | }, 1318 | { 1319 | "id": "201", 1320 | "color": "#FA6173", 1321 | "name": "糖果玫瑰" 1322 | }, 1323 | { 1324 | "id": "209", 1325 | "color": "#F60071", 1326 | "name": "明艳玫瑰" 1327 | }, 1328 | { 1329 | "id": "210", 1330 | "color": "#FF4D89", 1331 | "name": "大丽玫瑰" 1332 | }, 1333 | { 1334 | "id": "315", 1335 | "color": "#AC003A", 1336 | "name": "覆盆子红" 1337 | }, 1338 | { 1339 | "id": "317", 1340 | "color": "#E03B35", 1341 | "name": "暖柿红" 1342 | }, 1343 | { 1344 | "id": "307", 1345 | "color": "#93142F", 1346 | "name": "石榴红" 1347 | }, 1348 | { 1349 | "id": "301", 1350 | "color": "#DF3751", 1351 | "name": "西瓜红" 1352 | }, 1353 | { 1354 | "id": "214", 1355 | "color": "#BB3C5A", 1356 | "name": "复古玫瑰" 1357 | }, 1358 | { 1359 | "id": "323", 1360 | "color": "#C53057", 1361 | "name": "高雅梅" 1362 | }, 1363 | { 1364 | "id": "326", 1365 | "color": "#932844", 1366 | "name": "勃艮第红" 1367 | }, 1368 | { 1369 | "id": "327", 1370 | "color": "#9B325A", 1371 | "name": "莓紫红" 1372 | }, 1373 | { 1374 | "id": "324", 1375 | "color": "#EE4650", 1376 | "name": "秀场红" 1377 | }, 1378 | { 1379 | "id": "325", 1380 | "color": "#E11020", 1381 | "name": "圣水红" 1382 | }, 1383 | { 1384 | "id": "215", 1385 | "color": "#844452", 1386 | "name": "橡皮裸肌" 1387 | }, 1388 | { 1389 | "id": "329", 1390 | "color": "#731919", 1391 | "name": "红色高跟鞋" 1392 | }, 1393 | { 1394 | "id": "330", 1395 | "color": "#64263F", 1396 | "name": "复古提琴" 1397 | }, 1398 | { 1399 | "id": "331", 1400 | "color": "#58151E", 1401 | "name": "赤霞珠" 1402 | } 1403 | ] 1404 | }, { 1405 | "name": "禁忌之吻霓虹唇膏", 1406 | "lipsticks": [ 1407 | { 1408 | "id": "11", 1409 | "color": "#BA353C", 1410 | "name": "御姐橘" 1411 | }, 1412 | { 1413 | "id": "7", 1414 | "color": "#8B2844", 1415 | "name": "幻想紫" 1416 | }, 1417 | { 1418 | "id": "8", 1419 | "color": "#B12252", 1420 | "name": "暗夜莓" 1421 | }, 1422 | { 1423 | "id": "9", 1424 | "color": "#DD485B", 1425 | "name": "沉睡红" 1426 | }, 1427 | { 1428 | "id": "10", 1429 | "color": "#B53D52", 1430 | "name": "帅T红" 1431 | }, 1432 | { 1433 | "id": "12", 1434 | "color": "#B9282D", 1435 | "name": "女巫红" 1436 | }, 1437 | { 1438 | "id": "13", 1439 | "color": "#CA292E", 1440 | "name": "禁忌红" 1441 | }, 1442 | { 1443 | "id": "14", 1444 | "color": "#CB2D21", 1445 | "name": "鬼魅红" 1446 | }, 1447 | { 1448 | "id": "15", 1449 | "color": "#D43A29", 1450 | "name": "夜光橘" 1451 | }, 1452 | { 1453 | "id": "16", 1454 | "color": "#DF4541", 1455 | "name": "潮女红" 1456 | }, 1457 | { 1458 | "id": "18", 1459 | "color": "#D35C5E", 1460 | "name": "童话粉" 1461 | }, 1462 | { 1463 | "id": "22", 1464 | "color": "#EC2663", 1465 | "name": "精灵粉" 1466 | }, 1467 | { 1468 | "id": "23", 1469 | "color": "#C62E54", 1470 | "name": "魔女粉" 1471 | }, 1472 | { 1473 | "id": "24", 1474 | "color": "#AA2260", 1475 | "name": "傲娇粉" 1476 | }, 1477 | { 1478 | "id": "17", 1479 | "color": "#DD5852", 1480 | "name": "乙女粉" 1481 | }, 1482 | { 1483 | "id": "19", 1484 | "color": "#E36476", 1485 | "name": "治愈粉" 1486 | }, 1487 | { 1488 | "id": "20", 1489 | "color": "#EC6284", 1490 | "name": "萝莉粉" 1491 | }, 1492 | { 1493 | "id": "21", 1494 | "color": "#EA586F", 1495 | "name": "元气粉" 1496 | } 1497 | ] 1498 | } 1499 | ] 1500 | }] 1501 | } 1502 | --------------------------------------------------------------------------------