cropper.js使用

2023-05-16

       这两天一直在写上传头像那一部分,需要用到cropper裁剪,算起来这是我第二次用了,本来以为会比较顺手,结果一直报这个错。

在这里插入图片描述

本来以为是jq和cropper的引入顺序问题,结果调好了还在报这个错误,然后又考虑到会不会是jq和cropper的版本不对应,又知道cropper和cropper.js不一样,甚至还有一个jquery-cropper,去cropper.js官网看也不懂,看人家做出来的效果又觉得难,最后还是认真看了看别人总结翻译官网文档的博客,才知道本地引的和用cdn链接的js,对应的cropper写法完全不一样。按照别人翻译出来的效果就是很简单的样子,没有弹窗预览效果和翻转图片什么的,又觉得自己写不出来,就还是找别人写好的样式,结果又开始报上面的错,最后迫不得已,才决定自己按照别人的样式写一下,写完才觉得其实很简单,一整个麻住了,感觉自己浪费太多时间去cv别人的去去反复解决那一个报错,还是把这个经过和代码写下来提醒提醒自己,不能还没有开始做就觉得自己不能做。

	<!-- 引入css与引入js相同 -->
	<div class="changeHeadBtn">
        <!-- <input class="changeInput" type="file"/> -->
        <p class="upBtnFont"><i class="iconfont icon-banbenshengji"></i>更换头像</p>
    </div>
    <!-- 画布弹窗 -->
    <div class="box">
        <div class="cropperContent">
            <div class="cropperTop">
                <div class="seleceImgBtn">
                    <p class="upInputFont">选择图片</p>
                    <input type="file" class="cropperInput"/>
                </div>
                <p class="scloseCropper">x</p>
            </div>
            <div class="cropperCenter">
                <div class="centerLeft">
                    
                </div>
                <div class="centerRight">
                    <p>图片预览:</p>
                    <div class="small"></div> 
                    <div class="small" style="border-radius: 100%;"></div>  

                </div>
            </div>
            <div class="cropperBottom">
                <div class="manBtn">
                    <div class="resetBtn bottomBtn">复位</div>
                    <div class="rotateBtn bottomBtn">旋转</div>
                    <div class="huanXiangBtn bottomBtn">换向</div>
                </div>
                <div class="crop bottomBtn">确定</div>
            </div>
        </div>

    </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js"></script>

css

.changeHeadBtn {
            width: 170px;
            height: 45px;
            background-color: #ff7e88;
            color: white;
            position: relative;
            margin: 0 auto;
            letter-spacing: 1px;
            line-height: 45px;
            margin-top: 20px;
        }
        .changeHeadBtn > p{
            display: inline-block;
            position: absolute;
            top: 0px;
            left: 0px;
            width: 100%;
            height: 100%;
            margin: 0px;
            text-align: center;
        }
        
        .box {
            position: fixed;
            width: 100%;
            height: 100%;
            top: 0px;
            left: 0px;
            background-color: rgba(0, 0, 0, 0.5);
            display: none;
        }
        .box .cropperContent {
            display: flex;
            flex-direction: column;
            width: 700px;
            height: 600px;
            background-color: white;
            position: relative;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            border-radius: 20px;
            padding: 20px;
        }
        .box .cropperContent .cropperTop {
            display: flex;
            justify-content: space-between;
        }
        .box .cropperContent .cropperTop .seleceImgBtn {
            width: 110px;
            height: 40px;
            background-color: #ff7782;
            outline-color: white;
            position: relative;
            text-align: center;
        }
        .box .cropperContent .cropperTop .seleceImgBtn .upInputFont {
            text-decoration: none;
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            color: white;
            text-align: center;
            position: relative;
            top: 10px;
        }
        .box .cropperContent .cropperTop .seleceImgBtn .cropperInput {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 100%;
            height: 100%;
            cursor: pointer;
            display: inline-block;
            z-index: 99;
            opacity: 0;
        }
        .box .cropperContent .cropperTop .scloseCropper {
            font-size: 20px;
            margin-right: 10px;
            margin-bottom: 5px;
            color: #777777;
            cursor: pointer;
        }
        .box .cropperContent .cropperCenter {
            flex: 1;
            display: flex;
            margin: 20px 0px;
        }
        .box .cropperContent .cropperCenter .centerLeft {
            flex: 1;
            border: solid 1px #8a8a8a;
            margin-right: 20px;
            width: 440px;
            height: 430px;
        }
        .box .cropperContent .cropperCenter .centerLeft > img {
            
        }
        .box .cropperContent .cropperCenter .centerRight {
            color: #777777;
        }
        .box .cropperContent .cropperCenter .centerRight p {
            display: inline-block;
        }
        .box .cropperContent .cropperCenter .centerRight .small {
            width: 200px;
            height: 200px;
            overflow: hidden;
        }
        .box .cropperContent .cropperCenter .centerRight .smallRound {
            width: 200px;
            height: 200px;
            overflow: hidden;
            border-radius: 100%;
        }
        .box .cropperContent .cropperBottom {
            display: flex;
            justify-content: space-between;
            padding: 10px 0px;
        }
        .bottomBtn {
            display: inline-block;
            width: 60px;
            height: 30px;
            line-height: 30px;
            margin-right: 10px;
            text-align: center;
            background-color: #ff7782;
            cursor: pointer;
            color: white;
        }

js

 //点击修改头像要出来画布
        $('.upBtnFont')[0].onclick = function(){
            $('.box')[0].style.display = 'block'

        }
        var cropper = null

        $('.cropperInput')[0].onchange = function(){
            fileToBase64(this)//把图片放到画布上
            // 使用cdn引入Js
            cropper = new Cropper(image, {  
                aspectRatio: 1 / 1,//裁剪框的比例
                viewMode:1,//图片跟背景布的位置关系
                preview:'.small',//生成预览图的效果地方
                guides:false,//取消裁剪框上的虚线
                crop: function (e) {//裁剪过程执行的函数
                    
                    // console.log(e.detail.x);
                    // console.log(e.detail.y);
                    // console.log(e.detail.width);
                    // console.log(e.detail.height);
                    // console.log(e.detail.rotate);
                    // console.log(e.detail.scaleX);
                    // console.log(e.detail.scaleY);
                }
            });
            // 引入本地js的时候,用这个:
            // $("#image").cropper({
            //     aspectRatio: 1/1,
            //     viewMode: 1,
            //     minCropBoxWidth: 100,
            //     preview: '.small',
            //     preview:$('.smallRound')[0]
            // });
        }




        //将file转为base64,为了让选择的图片显示在画布上
        function fileToBase64(a){
            var txt=a.files[0];
                formData = new FormData()
            formData.append('img[]',txt);
            var src=window.URL.createObjectURL(txt);
            $('.centerLeft')[0].innerHTML = `
            <img src='${src}' id='image'/>
            `
        	let headImg = $('.centerLeft')[0].children[0]
		    //图片加载完之后
		    headImg.onload = function(){
		        let imgWidth = headImg.offsetWidth
		        let imgHeight = headImg.offsetHeight
		        if(imgWidth > imgHeight){
		            headImg.style.width = '100%'
		            headImg.style.height = 'auto'
		        }else{
		            headImg.style.width = 'auto'
		            headImg.style.height = '100%'
		        }
		    }
        }

        //复位按钮
        $('.resetBtn')[0].onclick = function(){
            if(ifInput()){
                cropper.reset()
            }
        }
        //旋转按钮
        $('.rotateBtn')[0].onclick = function(){
            if(ifInput()){
                cropper.rotate(90)
            }
        }
        //换向按钮
        var scale = true
        $('.huanXiangBtn')[0].onclick = function(){
            if(ifInput()){
                if(scale){
                    cropper.scale(-1,1)
                    scale = false
                }else{
                    cropper.scale(1,1)
                    scale = true
                }
            }
        }
        //判断有没有选择图片
        function ifInput(){
            if($('.cropperInput')[0].files[0]) return true
            else return false
        }
        //确定裁剪
        $('.crop')[0].onclick = function(){
            if(ifInput()){
                cropper.getCroppedCanvas().toBlob(b => {
                	console.log(b)//b是生成的blob类型的数据
		            var formData = new FormData()
		            // formData.append('multipartFile',b);  如果不做处理
		            formData.append('multipartFile',b,'temp.jpg');//封装formData,传给接口
		        })
                
            }
        }

实例化Cropper接收的参数有很多,基本上是对画布的处理,这篇博客写得很详细:https://blog.csdn.net/weixin_38023551/article/details/78792400
cropper的cdn链接:https://cdnjs.com/libraries/cropperjs
下载cropper的地址:https://github.com/fengyuanchen/cropperjs/tree/main/docs

结束结束。
两天啥也没干,净解决这个cropper is not a function。嗐!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cropper.js使用 的相关文章

随机推荐

  • gazebo无人机仿真显示:failsafe enabled: no rc

    修改qgc地面站参数 COM RC IN MODE 更改为 34 Joystick No RC Checks 34 这允许操纵杆输入并禁用 RC 输入检查 NAV RCL ACT to 34 Disabled 34 这可确保在没有无线遥控的
  • 力扣77组合(c++)

    力扣77组合 c 43 43 力扣题目链接 思路 这是一道经典的回溯算法题 xff0c 回溯法解决的问题都可以抽象为树形结构 xff08 N叉树 xff09 xff0c 我们可以通过树形结构来理解回溯算法 那么我把组合问题抽象为如下树形结构
  • 我的创作纪念日

    x1f36c 博主介绍 x1f468 x1f393 博主介绍 xff1a 大家好 xff0c 我是 PowerShell xff0c 很高兴认识大家 主攻领域 xff1a 渗透领域 数据通信 通讯安全 web安全 面试分析 x1f389 点
  • IDEA创建一个springboot项目教程(过程中各种报错解决)

    是不是不知道如何创建一个springboot项目 xff1f 是不是创建项目总是失败 xff1f 今天手把手带你创建一个springboot项目 配置maven 我们在创建一个springboot项目时一定要先配好maven配置文件sett
  • PHPWord相关

    phpword中进行换行操作 xff1a re 39 work experience 39 61 str replace array 34 r 34 34 n 34 34 r n 34 34 lt w br gt 34 re 39 work
  • 文件操作fwrite写txt文件乱码怎么办,我这里有方法解决

    很多大一新生到了期末做课设时 xff0c 遇到文件操作 总会有人不明白为什么写入的内容会乱码 先引入一些知识 xff1b 文件有二进制文件 xff0c 文本文件 二进制文件是按内存写入的 xff1b 文本文件是按格式写入的 xff1b 因此
  • DC电源口实物VCC引脚和GND引脚

    从后往前看 xff08 前面是电源线插进来的地方 xff09 xff0c 前面和左面是GND xff0c 后面是VCC
  • Docker入门

    前言 这就是一个简单的docker入门 因为可能现在用的少 笔者后面就有了些许草率 Docker 一篇入门 这里有阮一峰老师的docker简介传送门 这里有个语雀大佬的笔记传送门 后序也可以参考这个文章 一 Docker 简介 1 基本概述
  • java枚举类详解

    一 初始枚举 枚举类型是Java 5中新增特性的一部分 xff0c 它是一种特殊的数据类型 xff0c 之所以特殊是因为它既是一种类 class 类型却又比类类型多了些特殊的约束 xff0c 但是这些约束的存在也造就了枚举类型的简洁性 安全
  • vue报错:Component name “xxx“ should always be multi-word

    这个问题困扰我这个菜鸡很久了 xff0c 当我run serve的时候总是会报错Component name xxx should always be multi word 一直以为是命名的问题 xff0c 可是改了又改还是不行 xff0c
  • C语言学习---通过指针形参修改实参的值/交换两个数字的值---原理深究

    C语言学习 通过指针形参修改实参的值 交换两个数字的值 原理深究 要通过函数调用修改实参的值 xff0c 首先我们要明白函数调用过程中的传参方式与返回方式 xff1a 传参方式 xff1a 在c语言里面 xff0c 所有的参数传递都是单向的
  • [已解决]Git无法连接远程

    如果你是开了代理的情况下 xff0c Git失效了可以参考我的解决方法 今天Git忽然抽风了 xff0c 显示连接失败 正在获取 origin kex exchange identification Connection closed by
  • 服务端和客户端通信--UDP(含完整源代码)

    UDP通信实验 实验设备 xff1a 目标系统 xff1a Windows 软件工具 xff1a vs2022 vc6 dev 实验要求 xff1a 完成UDP服务端和客户端的程序编写 xff1b 分别实现UDP一对一通信和广播通信功能 实
  • Proteus 8 Professional发生关键仿真错误(疑似中文路径导致)

    Proteus 8 Professional发生关键仿真错误 xff08 疑似中文路径导致 xff09 在软件仿真时出现错误 显示好多红色代码 疑似之前把电脑名命名为中文了 所以缓存路径也是中文 导致Proteus 8 Profession
  • pm2实现linux重启后自启动node服务

    简介 利用pm2非常简单就可以实现 开机自启node服务的功能 目的是为解决服务器由于各种原因自动重启后 node服务没自动启动 导致无法工作的问题 操作步骤 使用pm2 start xff08 启动服务 执行pm2 save 保存当前已经
  • 【C++音视频开发】视频篇 | 图像基础概念

    前言 本专栏将不间断更新有关C 43 43 音视频开发的内容 xff0c 其中有初级章 中级章与高级章的内容 xff0c 包括但不限于音视频基础 FFmpeg实战 QT 流媒体客户端 流媒体服务器 WebRTC实战 Android NDK等
  • 【C++音视频开发】视频篇 | RGB与YUV

    前言 本专栏将不间断更新有关C 43 43 音视频开发的内容 xff0c 其中有初级章 中级章与高级章的内容 xff0c 包括但不限于音视频基础 FFmpeg实战 QT 流媒体客户端 流媒体服务器 WebRTC实战 Android NDK等
  • Docker-常用命令

    目录 一 docker基础命令1 启动与关闭docker2 查看docker信息3 docker帮助命令 二 docker镜像命令1 查询与搜索镜像2 拉取镜像3 删除镜像4 保存与加载镜像 三 docker容器命令1 查看容器运行及状态2
  • Ubuntu18.04安装VScode并配置ROS环境

    1 安装VScode 1 1通过命令安装 在终端命令行中依次输入以下命令 sudo add apt repository ppa ubuntu desktop ubuntu make sudo apt get update sudo apt
  • cropper.js使用

    这两天一直在写上传头像那一部分 xff0c 需要用到cropper裁剪 xff0c 算起来这是我第二次用了 xff0c 本来以为会比较顺手 xff0c 结果一直报这个错 本来以为是jq和cropper的引入顺序问题 xff0c 结果调好了还