JavaScript Canvas 实现九宫格图片切割与动画展示
作者:像素漫游时间:2026-10-28 18:32:09浏览:92
本文介绍如何利用HTML5 Canvas和JavaScript实现图片的九宫格切割与动态展示。通过ImageGrid构造函数,开发者可以自定义网格行列数、间距及偏移量,并选择是否启用逐格显示的动画效果。文章提供了完整的JS核心代码、HTML结构示例及具体的调用方法,帮助快速实现炫酷的图片分割特效。
JavaScript Canvas 九宫格核心实现
JavaScript核心实现逻辑
具体代码实现如下:
/*
*canvasid:HTML中Canvas元素的ID属性
*imageid:HTML中Img元素的ID属性
*gridcountX:X轴方向的图片分割份数
*gridcountY:Y轴方向的图片分割份数
*gridspace:网格之间的间隙像素值
*offsetX:网格区域相对于Canvas坐标原点(0,0)的X轴偏移量
*offsetY:网格区域相对于Canvas坐标原点(0,0)的Y轴偏移量
*isanimat:布尔值,控制是否开启动画播放效果
*/
function ImageGrid(canvasid, imageid, gridcountX, gridcountY, gridspace, offsetX, offsetY, isanimat) {
var image = new Image();
var g = document.getElementById(canvasid).getContext("2d");
var img=document.getElementById(imageid);
image.src=img.getAttribute("src");
g.drawImage(image, 0, 0);
var imagedata = g.getImageData(0, 0, image.width, image.height);
var grid_width = imagedata.width / gridcountX;
var grid_height = imagedata.height / gridcountY;
//动画逻辑处理
if (isanimat) {
var x = 0,
y = 0;
var inter = setInterval(function() {
g.putImageData(imagedata, gridspace * x + offsetX, gridspace * y + offsetY, grid_width * x, grid_height * y, grid_width, grid_height);
x < gridcountX ? x++ : x = 0;
if (x == 0) {
y < gridcountY ? y++ : y = 0;
}
}, 200);
y == gridcountY ? clearInterval(inter) : null;
} else { //非动画模式
for (var y = 0; y < gridcountY; y++) {
for (var x = 0; x < gridcountX; x++) {
g.putImageData(imagedata, gridspace * x + offsetX, gridspace * y + offsetY, grid_width * x, grid_height * y, grid_width, grid_height);
}
}
}
}
HTML 结构配置
HTML结构代码
具体HTML代码如下:
<canvas id="canvas1" width="900px" height="550px">Canvas demo</canvas>
<img id="image1" style="display:none" src="https://img.jbzj.com/file_images/article/201412/2014122894620636.jpg"/>
功能调用方法
调用方法示例:
具体调用代码如下:
//示例代码...
ImageGrid("canvas1", "image1", 3, 3, 2, 220, 0, true); //生成3*3网格
ImageGrid("canvas1", "image1", 4, 4, 2, 440, 0, true); //生成4*4网格
ImageGrid("canvas1", "image1", 3, 4, 2, 660, 0, false); //生成3*4网格且无动画
代码结构简洁,但能实现非常炫酷的视觉效果,读者是否已掌握?
作者最新文章
D3.js 处理大规模数据点的性能优化策略
2026-11-05 15:37:25
JS实现网页摄像头实时扫码:结合getUserMedia与jsQR教程
2026-11-05 15:27:28
D3.js v5 迁移到 v7 的 API 变更与注意事项
2026-11-05 11:57:17
使用 animate.js 实现多元素协同的序列动画
2026-11-04 22:27:53
JS拖拽排序时怎么添加平滑动画效果?FLIP技术实战
2026-11-04 10:12:22
