html canvas-nest.js 源碼

來源:互聯網
上載者:User

標籤:rgb   line   封裝   ice   pat   count   長度   方向   繪製   

canvas-nest.js 這個js檔案可以用來實現炫酷的線條與滑鼠進行互動的功能,具體效果

 

 

js具體源碼如下:

 

/**     * Copyright (c) 2016 hustcc     * License: MIT     * Version: %%GULP_INJECT_VERSION%%     * GitHub: https://github.com/hustcc/canvas-nest.js    **/    ! function() {      //封裝方法,壓縮之後減少檔案大小      function get_attribute(node, attr, default_value) {        return node.getAttribute(attr) || default_value;      }      //封裝方法,壓縮之後減少檔案大小      function get_by_tagname(name) {        return document.getElementsByTagName(name);      }      //擷取配置參數      function get_config_option() {        var scripts = get_by_tagname("script"),          script_len = scripts.length,          script = scripts[script_len - 1]; //當前載入的script        return {          l: script_len, //長度,用於產生id用          z: get_attribute(script, "zIndex", -1), //z-index          o: get_attribute(script, "opacity", 0.5), //opacity          c: get_attribute(script, "color", "0,0,0"), //color          n: get_attribute(script, "count", 99) //count        };      }      //設定canvas的高寬      function set_canvas_size() {        canvas_width = the_canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,        canvas_height = the_canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;      }          //繪製過程      function draw_canvas() {        context.clearRect(0, 0, canvas_width, canvas_height);        //隨機的線條和當前位置聯合數組        var e, i, d, x_dist, y_dist, dist; //臨時節點        //遍曆處理每一個點        random_points.forEach(function(r, idx) {          r.x += r.xa,          r.y += r.ya, //移動          r.xa *= r.x > canvas_width || r.x < 0 ? -1 : 1,          r.ya *= r.y > canvas_height || r.y < 0 ? -1 : 1, //碰到邊界,反向反彈          context.fillRect(r.x - 0.5, r.y - 0.5, 1, 1); //繪製一個寬高為1的點          //從下一個點開始          for (i = idx + 1; i < all_array.length; i++) {            e = all_array[i];            // 當前點存在            if (null !== e.x && null !== e.y) {              x_dist = r.x - e.x; //x軸距離 l              y_dist = r.y - e.y; //y軸距離 n              dist = x_dist * x_dist + y_dist * y_dist; //總距離, m                  dist < e.max && (e === current_point && dist >= e.max / 2 && (r.x -= 0.03 * x_dist, r.y -= 0.03 * y_dist), //靠近的時候加速                d = (e.max - dist) / e.max,                context.beginPath(),                context.lineWidth = d / 2,                context.strokeStyle = "rgba(" + config.c + "," + (d + 0.2) + ")",                context.moveTo(r.x, r.y),                context.lineTo(e.x, e.y),                context.stroke());            }          }        }), frame_func(draw_canvas);      }      //建立畫布,並添加到body中      var the_canvas = document.createElement("canvas"), //畫布        config = get_config_option(), //配置        canvas_id = "c_n" + config.l, //canvas id        context = the_canvas.getContext("2d"), canvas_width, canvas_height,        frame_func = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(func) {          window.setTimeout(func, 1000 / 45);        }, random = Math.random,        current_point = {          x: null, //當前滑鼠x          y: null, //當前滑鼠y          max: 20000 // 圈半徑的平方        },        all_array;      the_canvas.id = canvas_id;      the_canvas.style.cssText = "position:fixed;top:0;left:0;z-index:" + config.z + ";opacity:" + config.o;      get_by_tagname("body")[0].appendChild(the_canvas);          //初始化畫布大小      set_canvas_size();      window.onresize = set_canvas_size;      //當時滑鼠位置儲存,離開的時候,釋放當前位置資訊      window.onmousemove = function(e) {        e = e || window.event;        current_point.x = e.clientX;        current_point.y = e.clientY;      }, window.onmouseout = function() {        current_point.x = null;        current_point.y = null;      };      //隨機產生config.n條線位置資訊      for (var random_points = [], i = 0; config.n > i; i++) {        var x = random() * canvas_width, //隨機位置          y = random() * canvas_height,          xa = 2 * random() - 1, //隨機運動方向          ya = 2 * random() - 1;        // 隨機點        random_points.push({          x: x,          y: y,          xa: xa,          ya: ya,          max: 6000 //沾附距離        });      }      all_array = random_points.concat([current_point]);      //0.1秒後繪製      setTimeout(function() {        draw_canvas();      }, 100);    }();

 

 

在html網頁中body的標籤中添加script標籤,如下所示

<script type="text/javascript" color="208,55,66" opacity="0.5"count="99"src="test.js"></script>

 

 

color 顏色自訂,opactity 是透明度,一般來說0.5-1就可以了,count的是數量,不要太大,太大可能會使得使用者的瀏覽器卡頓,src後為該js檔案的所在路徑。

PS:

我直接用test命令了那個js檔案

 

html canvas-nest.js 源碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.