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网格且无动画

代码结构简洁,但能实现非常炫酷的视觉效果,读者是否已掌握?

作者最新文章