Discuz模板|Discuz插件|Discuz教程|Discuz素材免费下载

 找回密码
 立即注册

QQ登录

只需一步,快速开始

广告
温馨提示:本站所有DZ相关模板、插件、教程(包括DZ应用中心已下架插件、模板)所有用户可全部免费下载,无任何收费模式(不包括VIP版块非DZ资源,VIP版块需购买会员组方可下载),如本站没有您需要的插件或模板,请自行前往淘宝互站网送吗网等第三方站点搜索相关插件或模板进行低价格购买下载本站非常不建议用户浪费金钱前往DZ应用中心购买。

【实测】DZ论坛或门户利用canvas实现网页背景动画美化,圈圈点点

[复制链接]
tuyuanma 发表于 2018-11-12 14:12:59 来自手机 | 显示全部楼层 |阅读模式
温馨提醒:禁止内容附带广告图片、二维码图片,否则将在不通知情况下永久禁言账号!
欢迎加入兔源码站长交流群,您的加入是我们前行的动力!

DZ站长建站交流群:493651246

[ 温馨提示:点击上方群文字,可快速加入QQ群 ]


204541o1gztrlhtn1lr2rt.gif 3 s- c5 `8 L+ I! }
html
1 G" ~4 j% q0 V! I+ R8 J3 S
  1. <canvas id="c"></canvas>
复制代码
% X- I" t0 z  q, x9 C! B
js
  1. <script type="text/javascript">                ) E, X& ~+ k  ?$ f! Y
  2. $(document).ready(function() {                        4 Z1 o) @& j9 B1 M. K: j+ ^2 ^
  3.         var canvas = document.getElementById("c");
    1 \8 i: V4 `" n2 W9 C
  4.         var ctx = canvas.getContext("2d");: `# q! V1 @. Z  m
  5.         var c = $("#c");
    9 |8 V3 D7 Q8 ?- `
  6.         var w,h;
    # k7 \0 U: A: p  {# g: z
  7.         var pi = Math.PI;) p# S  B& I4 D) A- k  h
  8.         var all_attribute = {
    . S6 l' q8 Z$ I8 P9 m; x; B
  9.                 num:100,                                     // 个数, r4 \2 |; f8 p3 t* d( H! B& L
  10.                 start_probability:0.1,                     // 如果数量小于num,有这些几率添加一个新的                          $ z1 k- `* H6 q- J) u2 ], J
  11.                 radius_min:1,                                // 初始半径最小值
    $ Z3 `  I2 P) I8 H
  12.                 radius_max:2,                                // 初始半径最大值+ |5 Y2 C) D3 i$ m# \1 d
  13.                 radius_add_min:.3,               // 半径增加最小值
    1 q) c1 g8 F5 F, F# {, Y
  14.                 radius_add_max:.5,               // 半径增加最大值- I; }8 d* V3 s: f- X
  15.                 opacity_min:0.3,                 // 初始透明度最小值* k# `4 s# k" ]% e
  16.                 opacity_max:0.5,                                  // 初始透明度最大值9 L9 z  V1 C, E7 t
  17.                 opacity_prev_min:.003,            // 透明度递减值最小值
    ( P1 L! {5 o4 U2 v
  18.                 opacity_prev_max:.005,            // 透明度递减值最大值  Y7 P7 q. H9 O( T' ]
  19.                 light_min:40,                 // 颜色亮度最小值* ]3 B; c7 o, ?0 G2 B
  20.                 light_max:70,                 // 颜色亮度最大值
    8 i# [: S$ ?8 r
  21.         };
    * A% y2 c  s+ I) g) ~. N( G
  22.         var style_color = find_random(0,360);  
    ' U# t/ V- Z" D+ I8 M  o
  23.         var all_element =[];  Z, v+ w- i* o+ y4 y+ [$ g
  24.         window_resize();9 e! V  y/ S) Q4 P- {
  25.         function start(){
    ' z( f0 f( f" Q3 h4 e
  26.                 window.requestAnimationFrame(start);( ^( I1 h8 r7 N. m  @/ [1 v  o
  27.                 style_color+=.1;
    , t: g$ m# n6 o; @
  28.                 ctx.fillStyle = 'hsl('+style_color+',100%,97%)';
    % {- i. p+ B$ U  S  H9 t1 N
  29.                 ctx.fillRect(0, 0, w, h);) J4 O& K! B+ V3 T0 x
  30.                 if (all_element.length < all_attribute.num && Math.random() < all_attribute.start_probability){
    & \2 I( @+ d2 i0 `
  31.                         all_element.push(new ready_run);7 \; U( z' p, x! Z; }5 q
  32.                 }
    2 b5 r2 u8 Y$ n5 F/ _: U7 y
  33.                 all_element.map(function(line) {$ O/ A8 b% J8 l' u
  34.                         line.to_step();
    7 B; K+ A3 l. h7 J& D0 Z6 y4 x
  35.                 })/ s9 l( Q5 o. m6 G
  36.         }8 A, W: ]' A% y  v$ F
  37.         function ready_run(){% W/ Y: V4 \: V5 a4 E8 f& v
  38.                 this.to_reset();' b. T* ?, f: f0 R4 h, ^
  39.         }* k( A1 y* Z( h
  40.         ready_run.prototype = {
    & Q( C. ?/ Q; ]% c* T4 T
  41.                 to_reset:function(){* V8 A" z: c: A: l1 a8 {# q
  42.                         var t = this;. b- d- [2 v: u. y
  43.                         t.x = find_random(0,w);
      \' _6 Z4 H' `! _1 I+ T) c! t& |
  44.                         t.y = find_random(0,h);
    . T' @9 x6 c* L( X
  45.                         t.radius = find_random(all_attribute.radius_min,all_attribute.radius_max);, J$ @% ?5 {% u/ a. z# D
  46.                         t.radius_change = find_random(all_attribute.radius_add_min,all_attribute.radius_add_max);
    , M& \' s# Q  F$ D- L* j
  47.                         t.opacity = find_random(all_attribute.opacity_min,all_attribute.opacity_max);: U* a' W/ h: j* v
  48.                         t.opacity_change = find_random(all_attribute.opacity_prev_min,all_attribute.opacity_prev_max);0 @* _; }" N: l  w8 V* W0 ^4 O3 Y
  49.                         t.light = find_random(all_attribute.light_min,all_attribute.light_max);
    0 B- J2 i! S! E# D/ n! U. M, E; s
  50.                         t.color = 'hsl('+style_color+',100%,'+t.light+'%)';& Z8 B6 Q/ S/ J6 D& M, T' z6 M
  51.                 },
    $ |& }. T3 n/ Q% J8 i# y( Y
  52.                 to_step:function(){
    & z( I: a0 Z. D0 I, Q1 A* @
  53.                         var t = this;
    2 N  y+ a0 |+ ~. @4 f; m
  54.                         t.opacity -= t.opacity_change;" v1 s# ]! x4 ?: y, F
  55.                         t.radius += t.radius_change;9 P6 X! N: u# r
  56.                         if(t.opacity <= 0){
    ' J* K( P# y9 O" j1 [' d3 {! L
  57.                                 t.to_reset();2 z# X9 e5 P3 Y  \4 R+ H  f
  58.                                 return false;4 L) s0 e, O$ A7 c2 f( b
  59.                         }
    ' n' {, _4 J/ M" i: x" n! }; `- x2 u
  60.                         ctx.fillStyle = t.color;" o/ ]* a, C0 V
  61.                         ctx.globalAlpha = t.opacity;# D' T# S% X3 s
  62.                         ctx.beginPath();
    " o/ _0 z, y) z/ l- R
  63.                         ctx.arc(t.x,t.y,t.radius,0,2*pi,true);5 @4 J; T6 s, E
  64.                         ctx.closePath();
    / _$ g4 L8 X2 @7 q& ?
  65.                         ctx.fill();
    + b/ }! ~- u6 a+ y5 f
  66.                         ctx.globalAlpha = 1;5 w! S& [$ `& A
  67.                 }& T- p# T5 b/ x; I1 r* f; ?( g
  68.         }% u0 B. K4 S' H8 `& E. g  X
  69.         function window_resize(){
    / B$ p, P5 v. U5 S1 |
  70.                 w = window.innerWidth;' O" S& }$ }! ]; U6 e  [6 \" ^
  71.                 h = window.innerHeight;
    7 X( w+ B2 Z  H
  72.                 canvas.width = w;
    6 l7 K5 v- |( D3 V* n7 S
  73.                 canvas.height = h;# [4 J) m4 w7 F8 F9 l
  74.         }, F2 a: V6 A, N* l) C7 t4 x
  75.         $(window).resize(function(){
    4 r# L! Z7 n$ H6 z. l
  76.                 window_resize();' J. o# A3 Y6 m: A+ P; F: y
  77.         });& P8 `, h) D5 j8 w5 M8 D0 j
  78.         function find_random(num_one,num_two){9 H( z/ e+ {5 r$ l
  79.                 return Math.random()*(num_two-num_one)+num_one;
    - I( q. ~) x3 Z4 J5 y" M; Q
  80.         }5 q" z2 c1 W' k- p0 u
  81.         (function() {
    ' k$ |$ G+ {" O) N7 b
  82.                 var lastTime = 0;
    % e. i0 }$ `- V; M) F& _+ O, ^
  83.                 var vendors = ['webkit', 'moz'];  a5 B; o3 C7 Y$ q8 Q% E+ ~
  84.                 for(var xx = 0; xx < vendors.length && !window.requestAnimationFrame; ++xx) {& W+ A2 k2 j" D! F- x2 t# C" q7 i
  85.                         window.requestAnimationFrame = window[vendors[xx] + 'RequestAnimationFrame'];! C! A) T% i, T6 K1 J. c9 H
  86.                         window.cancelAnimationFrame = window[vendors[xx] + 'CancelAnimationFrame'] ||
    ; s2 ]3 ]( t; c& }
  87.                                                                                   window[vendors[xx] + 'CancelRequestAnimationFrame'];
    . T. G+ a1 Q7 g
  88.                 }, x4 n8 k) _  p! X) _, S& k; d2 u9 e
  89.         % G( f' n! w1 _) J5 ~: A  Q
  90.                 if (!window.requestAnimationFrame) {2 o$ E' N+ A2 J+ l
  91.                         window.requestAnimationFrame = function(callback, element) {
    * U! E) }0 R+ [" X7 I- s5 v
  92.                                 var currTime = new Date().getTime();# ?, h- l2 d4 c
  93.                                 var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));7 G2 P/ g& x, d; H  {
  94.                                 var id = window.setTimeout(function() {
      |; W* e' Z4 m- C4 L
  95.                                         callback(currTime + timeToCall);: g3 o, `1 e7 L8 m5 \
  96.                                 }, timeToCall);) s; H% Y' p+ r8 M0 C& x
  97.                                 lastTime = currTime + timeToCall;
    - j, p; D1 E0 K
  98.                                 return id;: C, W; Y' J$ j" {, P
  99.                         };7 j. p8 {; M( N1 I
  100.                 }) w6 w1 I4 n  {  h+ q  d
  101.                 if (!window.cancelAnimationFrame) {
    / K% p8 e, _! |
  102.                         window.cancelAnimationFrame = function(id) {
    4 t3 D( M/ k( B4 A7 `9 j; v& `
  103.                                 clearTimeout(id);
    " c6 h& x1 b* i* \
  104.                         };
    , Q) q2 }/ s% M; K
  105.                 }
    7 Y; l( i6 t& ?% \" U/ `, u$ {
  106.         }());6 m' K0 r/ z& D" ~6 b
  107.         start();
    % O5 S! s% P* D2 Q
  108. });
    * L. }$ I) W' ?1 S; Y
  109. </script>
复制代码
5 [0 K2 Z6 R: q" e
不需要图片,可用作背景或登录页。

版权声明
1、转摘或引用本站内容资源须注明原网址,并标明本站网址(兔源码www.tuyuanma.com);
2、对于转摘或引用本站内容资源而引起的民事纠纷、行政处罚或其他损失,本站不承担责任;
3、对于不遵守本声明或其他违法、恶意使用本站内容者,本站保留其追究法律责任的权利。




自动排版 | 高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广告
493651246站长邮箱:tuyuanma@qq.com 站长QQ:3197813386

© 2001-2013 本站内容皆来自互联网及用户分享,如需删除请提供软著或商标证书。

快速回复 返回顶部 返回列表