2012-04-24 43 views

回答

21

是的,它是JavaScript。使用<canvas>元素。

下面是代碼:

(function() { 
    var c = !0, 
     d = !1; 
    try { 
     window.google || (window.google = {}); 
     google.doodle || (google.doodle = {}); 
     var f = google.doodle, 
      h, j, k, l, m, n, o = 0, 
      p = 23, 
      q, r, s, u, v, w, x, y = 142, 
      z = 356, 
      A = 311, 
      B = 0, 
      C = 0, 
      D = 30, 
      E = 15, 
      F = d, 
      G, H = d, 
      I = d, 
      J = { 
       back: { 
        src: "/logos/2012/sundback12-hp-s.png", 
        height: 31, 
        width: 24, 
        x: 0, 
        y: 0 
       }, 
       s: { 
        src: "/logos/2012/sundback12-hp-l.jpg", 
        height: 120, 
        width: 186, 
        x: 0, 
        y: 0 
       }, 
       F: { 
        src: "/logos/2012/sundback12-hp-l.jpg", 
        height: 120, 
        width: 186, 
        x: 186, 
        y: 0 
       }, 
       i: { 
        src: "/logos/2012/sundback12-hp-s.png", 
        height: 60, 
        width: 28, 
        x: 24, 
        y: 0 
       }, 
       top: { 
        src: "/logos/2012/sundback12-hp-s.png", 
        height: 23, 
        width: 8, 
        x: 52, 
        y: 0 
       }, 
       G: { 
        src: "/logos/2012/sundback12-hp-s.png", 
        height: 7, 
        width: 15, 
        x: 60, 
        y: 0 
       }, 
       B: { 
        src: "/logos/2012/sundback12-hp-s.png", 
        height: 7, 
        width: 15, 
        x: 75, 
        y: 0 
       } 
      }, 
      K = function() { 
       google.psy && google.nav && google.nav.go ? google.nav.go("https://stackoverflow.com/search?q=Gideon+Sundback&ct=sundback12-hp&oi=ddle") : window.location.href = "https://stackoverflow.com/search?q=Gideon+Sundback&ct=sundback12-hp&oi=ddle" 
      }, 
      L = function (a, b, g, i, e) { 
       a.beginPath(); 
       a.moveTo(b, g); 
       a.lineTo(i, e); 
       a.stroke() 
      }, 
      M = function (a, b, g) { 
       var i = document.createElement("canvas"), 
        e = i.getContext("2d"), 
        t = j.createLinearGradient(0, 0, 0, g); 
       t.addColorStop(0, "#f5f5f5"); 
       t.addColorStop(1, "#f1f1f1"); 
       e.fillStyle = t; 
       e.fillRect(1, 1, b - 2, g - 2); 
       e.lineWidth = 1; 
       e.strokeStyle = "#d0d0d0"; 
       L(e, 1, 0, b - 1, 0); 
       L(e, b, 1, b, g - 1); 
       L(e, b - 1, g, 1, g); 
       L(e, 0, g - 1, 0, 1); 
       e.fillStyle = "#444"; 
       e.textAlign = "center"; 
       e.font = "bold 11px Arial,sans-serif"; 
       e.fillText(a, b/2, g * 2/3); 
       return i 
      }, 
      N = function (a, b) { 
       var g = document.createElement("canvas"), 
        i = g.getContext("2d"); 
       i.fillStyle = "#fff"; 
       i.fillRect(0, 0, b, 29); 
       i.lineWidth = 1; 
       i.strokeStyle = "#c0c0c0"; 
       L(i, 0, 0, b, 0); 
       i.strokeStyle = "#d9d9d9"; 
       L(i, 0, 29, b, 29); 
       var e = a ? 0 : b; 
       L(i, e, 0, e, 29); 
       return g 
      }, 
      O = "move,-ie-grabbing,-moz-grabbing,-o-grabbing,-webkit-grabbing,grabbing".split(","), 
      aa = "move,-ie-grab,-moz-grab,-o-grab,-webkit-grab,grab".split(","), 
      P = function (a, b) { 
       if (a) for (var g in b) a.style.cursor = b[g] 
      }, 
      ba = function (a) { 
       if (!H && !Q()) { 
        F = H = c; 
        google.listen(window, "mouseup", R); 
        google.listen(window, "mousemove", S); 
        h.style.zIndex = "2000"; 
        P(h, O); 
        k && P(k, O); 
        l.q.blur(); 
        google.psy && K(); 
        T(); 
        S(a) 
       } 
      }, 
      R = function() { 
       if (!I && H) { 
        I = c; 
        F = d; 
        h.style.cursor = "auto"; 
        if (k) k.style.cursor = "auto"; 
        ca() 
       } 
      }, 
      S = function (a) { 
       if (F) { 
        a ? a.stopPropagation && a.stopPropagation() : window.event.cancelBubble = c; 
        a.preventDefault ? a.preventDefault() : a.returnValue = d; 
        a = a || window.event; 
        G = !a ? [0, 0] : [(a.clientX || a.targetTouches && a.targetTouches[0] && a.targetTouches[0].clientX || 0) + (document.body.scrollLeft || document.documentElement.scrollLeft || 0), (a.clientY || a.targetTouches && a.targetTouches[0] && a.targetTouches[0].clientY || 0) + (document.body.scrollTop || document.documentElement.scrollTop || 0)]; 
        a = B; 
        B = Math.max(0, G[1] - o - 30 - J.i.height); 
        if (f.z > 0) { 
         f.z--; 
         var b = B - a; 
         Math.abs(b) > 50 && (B = a + b * 0.25) 
        } 
        U() 
       } 
      }, 
      T = function() { 
       var a = document.getElementById("mgmhppd"); 
       o = a ? a.offsetHeight : 0; 
       a = o + 30; 
       h.style.top = a + "px"; 
       var b = document.getElementById("ftby"); 
       if (b && b.parentNode) p = b.parentNode.offsetHeight; 
       h.height = x = document.body.clientHeight - (o + (H ? 0 : 30 + p)); 
       var b = 833, 
        g = document.getElementById("gbqf"); 
       g && (b = Math.max(b, g.offsetWidth)); 
       h.width = v = Math.max(b, document.body.clientWidth); 
       w = v/2; 
       G || (G = [0, 0]); 
       G[0] = w; 
       if (k) { 
        b = k.style; 
        b.top = h.style.top; 
        b.left = w - 236 + "px"; 
        if (l) b.height = google.style.getPageOffsetTop(l) - a + "px" 
       } 
       da(); 
       U() 
      }, 
      V = function (a) { 
       a.addColorStop(0, "rgba(255,255,255,0)"); 
       a.addColorStop(0.01, "#eee"); 
       a.addColorStop(0.55, "#fff"); 
       a.addColorStop(0.58, "#b1b1b1"); 
       a.addColorStop(0.68, "#dedede"); 
       a.addColorStop(0.98, "#dedede"); 
       a.addColorStop(0.99, "rgba(255,255,255,0)") 
      }, 
      da = function() { 
       q = w - C + 1; 
       r = w + C; 
       s = q - 42; 
       u = r + 42 
      }, 
      U = function() { 
       if (j) { 
        j.clearRect(0, 0, v, x); 
        var a = s - B, 
         b = u + B; 
        j.fillStyle = "#fff"; 
        f.g || j.fillRect(0, 0, v, x); 
        j.beginPath(); 
        j.moveTo(0, 0); 
        j.lineTo(a, 0); 
        j.arc(a, B, B + 21, -Math.PI/2, 0, d); 
        j.lineTo(s, x); 
        j.lineTo(0, x); 
        j.lineTo(0, 0); 
        j.fill(); 
        j.beginPath(); 
        j.moveTo(v, 0); 
        j.lineTo(b, 0); 
        j.arc(b, B, B + 21, -Math.PI/2, Math.PI, c); 
        j.lineTo(u, x); 
        j.lineTo(v, x); 
        j.lineTo(v, 0); 
        j.fill(); 
        W(J.s, -42, y, c); 
        W(J.F, -42, y, d); 
        if (H) { 
         W(J.v, 0, A, c); 
         W(J.w, 0, A, d) 
        } 
        if (H) { 
         var g = !l || l.q.dir != "rtl"; 
         W(J.search, -57, z, g); 
         W(J.C, -57, z, !g) 
        } 
        g = j.createRadialGradient(a, B, B, a, B, B + 42); 
        V(g); 
        j.fillStyle = g; 
        j.fillRect(a, 0, B + 42, B); 
        a = j.createRadialGradient(b, B, B, b, B, B + 42); 
        V(a); 
        j.fillStyle = a; 
        j.fillRect(r, 0, B + 42, B); 
        a = j.createLinearGradient(s, 0, q, 0); 
        V(a); 
        j.fillStyle = a; 
        j.fillRect(s, B, 42, x - B); 
        a = j.createLinearGradient(u, 0, r, 0); 
        V(a); 
        j.fillStyle = a; 
        j.fillRect(r, B, 42, x - B); 
        a = J.B.height + 5; 
        for (b = 0; b < x; b = b + a) { 
         W(J.G, 3, b + a/2, c); 
         W(J.B, 3, b, d) 
        } 
        a = A - 50; 
        a = Math.min(1, (a - (B - 50))/a); 
        if (H && a > 0) { 
         j.save(); 
         j.globalAlpha = a; 
         W(J.v, 0, A, c); 
         W(J.w, 0, A, d); 
         j.restore() 
        } 
        X(J.back, r - J.back.width/2, B); 
        j.save(); 
        a = 0; 
        G && (a = Math.atan((w - G[0])/J.i.height)); 
        j.translate(r + a * 6, B + 12 + Math.abs(a) * 6); 
        j.rotate(a); 
        X(J.i, 0 - J.i.width/2, 0); 
        j.restore(); 
        X(J.top, r - J.top.width/2, B + 5) 
       } 
      }, 
      X = function (a, b, g) { 
       b > h.width || g > h.height || j.drawImage(a.a, a.x, a.y, a.width, a.height, b, g, a.width, a.height) 
      }, 
      W = function (a, b, g, i) { 
       var e = i ? q : r; 
       if (g > B) { 
        e = i ? e + b - a.width : e - b; 
        X(a, e, g) 
       } else { 
        var t = 0; 
        B != 0 && (t = (B - g)/B); 
        b = B + 42 + b; 
        if (i) { 
         b = b - a.width; 
         e = e - 42 - B + Math.cos(t) * b 
        } else e = e + 42 + B - Math.cos(t) * b; 
        j.save(); 
        j.translate(e, B - Math.sin(t) * b); 
        j.rotate(Math.PI * 2 + (i ? -t : t)); 
        X(a, 0, 0); 
        j.restore() 
       } 
      }, 
      ea = function() { 
       google.psy || Y() 
      }, 
      Z = function (a) { 
       var b = document.getElementById("hplogo-i"); 
       if (b) b.style.display = a ? "" : "none" 
      }, 
      Y = function (a) { 
       window.clearTimeout(f.A); 
       if (n && m) n.style.position = m.style.position = ""; 
       if (h && (!a || !google.psy && google.browser.product.FIREFOX)) h.style.display = "none"; 
       if (k) k.style.display = "none"; 
       Z(c); 
       google.unlisten(window, "resize", T); 
       google.unlisten(window, "mouseup", R); 
       google.unlisten(window, "mousemove", S) 
      }, 
      fa = function() { 
       if (google.msg) { 
        f.o && google.msg.unlisten(40, f.o); 
        f.o = function() { 
         H || Y(); 
         f.g = c; 
         google.msg.unlisten(40, f.o); 
         f.p ? Y() : U(); 
         return c 
        }; 
        google.msg.listen(40, f.o); 
        f.k && google.msg.unlisten(64, f.k); 
        f.k = function() { 
         T(); 
         google.msg.unlisten(64, f.k); 
         return c 
        }; 
        google.msg.listen(64, f.k); 
        f.n && google.msg.unlisten(67, f.n); 
        f.n = function() { 
         H || Y(); 
         google.msg.unlisten(67, f.n); 
         return c 
        }; 
        google.msg.listen(67, f.n) 
       } 
      }, 
      Q = function() { 
       var a = window.location.href; 
       return a.indexOf("#") > -1 && /[^a-z]q=/.test(a) ? c : d 
      }, 
      $ = function() { 
       if (!f.D && google.dstr && google.rein) { 
        f.D = c; 
        google.dstr.push(ea); 
        google.rein.push($) 
       } 
       f.cpDestroy = Y; 
       f.cpInit = $; 
       a: { 
        for (var a = document.forms, b = ["f", "gs", "tsf", "gbqf"], g = 0, i; i = b[g++];) if (i = a[i]) { 
         l = i; 
         break a 
        } 
        l = null 
       } 
       m = l.btnK; 
       n = l.btnI; 
       if (!(a = !l)) if (!(a = !l.q)) if (!(a = l.q.value.length > 0)) if (!(a = Q())) { 
        h = document.getElementById("hplogo-z"); 
        if (!h) { 
         h = document.createElement("canvas"); 
         document.body.appendChild(h) 
        } 
        if (h.getContext) { 
         j = h.getContext("2d"); 
         Z(d); 
         h.id = "hplogo-z"; 
         a = h.style; 
         a.left = "0"; 
         a.position = "absolute"; 
         a.display = ""; 
         a.visibility = ""; 
         a.zIndex = "-1"; 
         if (k = document.getElementById("hplogo-c")) { 
          k.onmouseover = U; 
          k.onmousedown = ba; 
          k.ontouchstart = ba; 
          k.style.display = ""; 
          P(k, aa) 
         } 
         a = c 
        } else a = d; 
        a = !a 
       } 
       if (a) Z(c); 
       else { 
        window.clearTimeout(f.A); 
        C = B = 0; 
        E = 15; 
        D = 30; 
        I = H = d; 
        f.g = d; 
        f.p = d; 
        f.z = 5; 
        f.g = d; 
        fa(); 
        for (var e in J) { 
         a = J[e]; 
         if (a.src) { 
          a.a = new Image; 
          a.a.onload = U; 
          a.a.src = a.src 
         } 
        } 
        if (l && n && m) { 
         J.search = { 
          a: M(m.innerText || m.textContent || m.value, m.offsetWidth, m.offsetHeight), 
          height: m.offsetHeight, 
          width: m.offsetWidth, 
          x: 0, 
          y: 0 
         }; 
         J.C = { 
          a: M(n.innerText || n.textContent || n.value, n.offsetWidth, n.offsetHeight), 
          height: n.offsetHeight, 
          width: n.offsetWidth, 
          x: 0, 
          y: 0 
         }; 
         e = Math.floor(google.style.getWidth(l.q)/2); 
         J.v = { 
          a: N(c, e), 
          height: 29, 
          width: e, 
          x: 0, 
          y: 0 
         }; 
         J.w = { 
          a: N(d, e), 
          height: 29, 
          width: e, 
          x: 0, 
          y: 0 
         } 
        } 
        google.listen(window, "resize", T); 
        T(); 
        y = Math.max(0, google.style.getPageOffsetTop(l) - o - 15 - J.s.height - 30); 
        z = google.style.getPageOffsetTop(m) - o - 30; 
        A = google.style.getPageOffsetTop(l) - o - 30; 
        if (l && n && m) { 
         b = google.style.getWidth(n) - google.style.getWidth(m); 
         a = e = 42; 
         b > 0 ? e = e + b : a = a - b; 
         b = l.q.dir != "rtl"; 
         n.style.position = m.style.position = "relative"; 
         n.style[b ? "left" : "right"] = e + "px"; 
         m.style[b ? "right" : "left"] = a + "px" 
        } 
        U() 
       } 
      }, 
      ca = function() { 
       B = B + D; 
       D = D + 2; 
       G[0] = G[0] + (w - G[0]) * 0.3; 
       if (B > x) { 
        C = C + E; 
        E = E + 5; 
        da() 
       } 
       U(); 
       if (C < w) f.A = window.setTimeout(ca, 30); 
       else { 
        G[0] = w; 
        f.p = c; 
        if (google.psy && f.g) Y(); 
        else { 
         Y(c); 
         K() 
        } 
       } 
      }; 
     google.x ? google.x({ 
      id: "DOODLE" 
     }, $) : $() 
    } catch (ga) { 
     google.ml(ga, d, { 
      cause: "DOODLE" 
     }) 
    }; 
})();