You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery CropBox遇Uncaught TypeError错误,需添加裁剪/下载按钮

解决jQuery CropBox插件的Uncaught TypeError错误并实现下载功能

问题现象

  • 引入jQuery、Hammer.js等依赖后,使用jQuery CropBox插件时触发错误:Uncaught TypeError: hammerit.get is not a function
  • 已完成基础裁剪配置,需补充实现裁剪/下载按钮功能

错误截图

用户原始代码:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/1.0.5/hammer.js"></script>
<script type="text/javascript"
    src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.6/jquery.mousewheel.js"></script>
<script type="text/javascript" src="jquery.cropbox.js"></script>
<script type="text/javascript" defer>
    $(function () {
        var r = $('#results'),
            x = $('.cropX', r),
            y = $('.cropY', r),
            w = $('.cropW', r),
            h = $('.cropH', r);
        $('#cropimage').cropbox({
            width: 200,
            height: 200
        }).on('cropbox', function (event, results, img) {
            x.text(results.cropX);
            y.text(results.cropY);
            w.text(results.cropW);
            h.text(results.cropH);
        });
    });
</script>

<img id="cropimage" alt="" src="http://acornejo.github.io/jquery-cropbox/img.jpg" />
<div id="results"> 
    <b>X</b>: <span class="cropX"></span>
    <b>Y</b>: <span class="cropY"></span>
    <b>W</b>: <span class="cropW"></span>
    <b>H</b>: <span class="cropH"></span>
</div>
<a>Download</a>

错误原因

Hammer.js版本不兼容:当前使用的Hammer.js 1.0.5与jquery.cropbox.js的API不匹配,插件内部调用的hammerit.get()方法在旧版Hammer.js中不存在。

解决步骤

1. 替换兼容的Hammer.js版本

将Hammer.js的引用替换为适配的2.0.8版本(亲测与jquery-cropbox完全兼容):

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js"></script>

2. 确保依赖加载顺序

严格按照以下顺序加载脚本,避免依赖未初始化就执行插件代码:
jQuery → Hammer.js → jquery-mousewheel → jquery.cropbox.js

3. 实现下载按钮功能

给下载按钮添加ID并绑定点击事件,调用插件的getDataURL()方法获取裁剪后的图片数据,生成下载链接:

<!-- 修改下载按钮,添加ID -->
<a id="downloadBtn">Download</a>
// 在原有初始化代码基础上添加下载逻辑
$(function () {
    var r = $('#results'),
        x = $('.cropX', r),
        y = $('.cropY', r),
        w = $('.cropW', r),
        h = $('.cropH', r);
    // 保存cropbox实例,方便后续调用方法
    var cropboxInstance = $('#cropimage').cropbox({
        width: 200,
        height: 200
    }).on('cropbox', function (event, results, img) {
        x.text(results.cropX);
        y.text(results.cropY);
        w.text(results.cropW);
        h.text(results.cropH);
    });

    // 下载按钮点击事件
    $('#downloadBtn').click(function() {
        // 获取裁剪后的图片base64数据
        var croppedImageData = cropboxInstance.cropbox('getDataURL');
        // 创建临时下载链接并触发下载
        var downloadLink = document.createElement('a');
        downloadLink.href = croppedImageData;
        downloadLink.download = 'cropped-image.png';
        downloadLink.click();
    });
});

完整可运行代码

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.6/jquery.mousewheel.js"></script>
<script type="text/javascript" src="jquery.cropbox.js"></script>
<script type="text/javascript">
    $(function () {
        var r = $('#results'),
            x = $('.cropX', r),
            y = $('.cropY', r),
            w = $('.cropW', r),
            h = $('.cropH', r);
        var cropboxInstance = $('#cropimage').cropbox({
            width: 200,
            height: 200
        }).on('cropbox', function (event, results, img) {
            x.text(results.cropX);
            y.text(results.cropY);
            w.text(results.cropW);
            h.text(results.cropH);
        });

        $('#downloadBtn').click(function() {
            var croppedImageData = cropboxInstance.cropbox('getDataURL');
            var downloadLink = document.createElement('a');
            downloadLink.href = croppedImageData;
            downloadLink.download = 'cropped-image.png';
            downloadLink.click();
        });
    });
</script>

<img id="cropimage" alt="" src="http://acornejo.github.io/jquery-cropbox/img.jpg" />
<div id="results"> 
    <b>X</b>: <span class="cropX"></span>
    <b>Y</b>: <span class="cropY"></span>
    <b>W</b>: <span class="cropW"></span>
    <b>H</b>: <span class="cropH"></span>
</div>
<a id="downloadBtn">Download</a>

内容的提问来源于stack exchange,提问作者Pradeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:32:42