23.6.19 |
0
nhận xét
|
lượt xem
Bài viết hướng dẫn thiết kế hình nền các hạt phân tử chuyển động có sự tương tác với con trỏ chuột rất vui mắt bằng Javascript
Tạo hình nền tối với CSS
<style>
body { background-color:#222;}
</style>
Tạo các hạt phân tử bằng Javascript
<script type="text/javascript" color="255,255,255" opacity='0.7' zIndex="-2" count="300" src="canvas-nest.js"></script>
Nội dung đoạn JS 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", .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 all_array = [current_point].concat(random_lines);
var e, i, d, x_dist, y_dist, dist; //临时è‚点
//éå†å¤„ç†æ¯ä¸€ä¸ªç‚¹
random_lines.forEach(function(r) {
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 = 0; i < all_array.length; i++) {
e = all_array[i];
//ä¸æ˜¯å½“å‰ç‚¹
if (r !== e && 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())
}
}
all_array.splice(all_array.indexOf(r), 1)
}), 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
};
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_lines = [], i = 0; config.n > i; i++) {
var x = random() * canvas_width, //é机ä½ç½®
y = random() * canvas_height,
xa = 2 * random() - 1, //é机è¿å¨æ–¹å‘
ya = 2 * random() - 1;
random_lines.push({
x: x,
y: y,
xa: xa,
ya: ya,
max: 6000 //沾附è·ç¦»
})
}
//0.1秒å绘制
setTimeout(function() {
draw_canvas()
}, 100)
}();
Cảm ơn đã theo dõi và chúc bạn thành công! ./.Nguồn: cssscript.com
Chèn hình ảnh: Chỉ cần dán link hình ảnh - Upload ảnh
Chèn code: [pre]Code đã mã hóa [/pre]
Chèn emoji: Nhấn tổ hợp phím “Windows + . (dấu chấm)”
Chèn link: Click để chèn link