当前位置: 首页 > wzjs >正文

ssc网站建设wordpress 调节显示文章位置

ssc网站建设,wordpress 调节显示文章位置,免费企业网站建设哪家,东莞seo搜索🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

在这里插入图片描述

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用
✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧
💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程
🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整
🌞《Spring Security》专栏中我们将逐步深入Spring Security的各个技术细节,带你从入门到精通,全面掌握这一安全技术
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

前端图片裁剪上传全流程详解:从预览到上传的完整流程

  • 1. 前言:为什么需要图片裁剪上传?
  • 2. 技术选型
  • 3. 本地图片预览实现
    • 3.1 基础文件读取
    • 3.2 加入文件类型校验
  • 4. 集成Cropper.js实现交互式裁剪
    • 4.1 初始化裁剪功能
    • 4.2 裁剪结果实时预览
    • 4.3 获取裁剪后的File对象
  • 5. 完整代码整合
  • 6. 结语

1. 前言:为什么需要图片裁剪上传?

在前端开发中,图片上传是非常常见的功能,尤其是在用户头像设置商品图上传等场景中,我们往往还需要在上传前提供裁剪功能。通过本地预览和实时裁剪,用户可以:避免上传冗余数据精准控制展示内容减少服务器处理压力

在此博主将详细讲解如何在前端实现一个“图片裁剪上传”的完整流程,完整内容包括:

  • 本地预览图片
  • 用户交互与裁剪
  • 实时预览裁剪结果
  • 获取裁剪结果的 File 对象
  • 上传前的处理逻辑

并附有完整的 HTML + JavaScript 示例,适合实际项目中小伙伴们直接参考或使用


2. 技术选型

本文使用以下技术栈来实现功能:

  • 原生 HTML / JavaScript:不依赖框架,易于集成
  • Cropper.js:一个优秀的图片裁剪库,功能强大,使用简单

在这里插入图片描述
Cropper.js 官网: https://fengyuanchen.github.io/cropperjs/ 想了解更多使用技巧的小伙伴们可以进行查阅


3. 本地图片预览实现

3.1 基础文件读取

用户上传图片后,我们需要立即在前端进行预览,这可以通过 File API 结合 URL.createObjectURL() 方法实现:

<input type="file" id="imageInput" accept="image/*">
<img id="previewImage" style="max-width: 100%; display: none;"><button id="uploadBtn">上传图片</button>

使用 URL.createObjectURL() 生成临时预览图片地址

<script>
const input = document.getElementById('uploadInput');
const previewImage = document.getElementById('previewImage');input.addEventListener('change', async (e) => {const file = e.target.files[0];if (!file) return;// 通过URL实现预览previewImage.src = URL.createObjectURL(file);
});
</script>

3.2 加入文件类型校验

上述代码我们已经可以实现图片的预览,很多时候我们还需要对文件进行一些验证,下述代码可以供小伙伴参考

// 获得file对象后进行类型、大小验证
const file = e.target.files[0];
// 校验文件类型和大小(2MB限制)
const MAX_SIZE = 2 * 1024 * 1024;if (!file.type.startsWith('image/')) {alert('请选择图片文件');return;
}if (file.size > MAX_SIZE) {alert('图片大小不能超过2MB');return;
}

4. 集成Cropper.js实现交互式裁剪

通过 Cropper.js 我们可以让用户对图片进行自由裁剪,这里博主将完整演示从初始化、到获取裁剪结果实时预览、获取裁剪结果 File 对象

4.1 初始化裁剪功能

首先引入 Cropper.js

<link href="https://unpkg.com/cropperjs/dist/cropper.min.css" rel="stylesheet">
<script src="https://unpkg.com/cropperjs"></script>

如果你是使用的是 npm 进行包管理,可以使用 npm install cropperjs 直接安装

初始化代码

let cropper;previewImage.addEventListener('load', function () {if (cropper) {cropper.destroy();}cropper = new Cropper(previewImage, {aspectRatio: 1, // 比例1:1,可根据需求修改viewMode: 1, // 限制裁剪框不超过图片范围preview: '.img-preview' // 裁剪结果预览区域});
});

4.2 裁剪结果实时预览

Cropper.js 支持设置一个区域来实时显示裁剪结果: 初始化时候指定的 .img-preview

创建预览容器

<div class="img-preview" style="width:100px;height:100px;overflow:hidden;border:1px solid #ccc;"></div>

Cropper.js 会自动更新这个预览区的内容,无需额外代码。

4.3 获取裁剪后的File对象

当用户点击“确定上传”按钮后,我们需要将裁剪后的图片提取出来,并转为可以上传的 FileBlob 对象:

document.getElementById('uploadBtn').addEventListener('click', function () {if (!cropper) return;cropper.getCroppedCanvas({width: 200,height: 200}).toBlob(function (blob) {const file = new File([blob], 'cropped.png', { type: 'image/png' });// 上传逻辑uploadImage(file);});
});function uploadImage(file) {const formData = new FormData();formData.append('image', file);// 模拟上传的位代码fetch('/upload', {method: 'POST',body: formData}).then(res => res.json()).then(data => {console.log('上传成功', data);}).catch(err => {console.error('上传失败', err);});
}

5. 完整代码整合

结合上述的讲解,博主把完整的代码整理出来,下面是一个可以直接运行的完整 HTML 文件,小伙伴们可以复制进行运行测试:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>图片裁剪上传示例</title><link href="https://unpkg.com/cropperjs/dist/cropper.min.css" rel="stylesheet"><script src="https://unpkg.com/cropperjs"></script><style>#previewImage {max-width: 100%;display: none;}.img-preview {width: 100px;height: 100px;overflow: hidden;margin-top: 10px;border: 1px solid #ccc;}</style>
</head>
<body><h2>选择图片进行裁剪上传</h2><input type="file" id="imageInput" accept="image/*"><br><img id="previewImage"><div class="img-preview"></div><br><button id="uploadBtn">上传图片</button><script>const imageInput = document.getElementById('imageInput');const previewImage = document.getElementById('previewImage');let cropper;imageInput.addEventListener('change', function () {const file = this.files[0];if (file) {previewImage.src = URL.createObjectURL(file);previewImage.style.display = 'block';}});previewImage.addEventListener('load', function () {if (cropper) {cropper.destroy();}cropper = new Cropper(previewImage, {aspectRatio: 1,viewMode: 1,preview: '.img-preview'});});document.getElementById('uploadBtn').addEventListener('click', function () {if (!cropper) return;cropper.getCroppedCanvas({width: 200,height: 200}).toBlob(function (blob) {const file = new File([blob], 'cropped.png', { type: 'image/png' });const formData = new FormData();formData.append('image', file);// 替换成你自己的后端上传地址fetch('/upload', {method: 'POST',body: formData}).then(res => res.json()).then(data => {alert('上传成功');console.log(data);}).catch(err => {alert('上传失败');console.error(err);});});});</script>
</body>
</html>

6. 结语

本文通过 Cropper.js 实现了一个完整的图片裁剪上传功能,包括本地预览、裁剪交互、裁剪结果预览以及上传处理。整个流程既保证了用户体验,又方便了后端处理。

如果你在项目中也需要图片上传功能,不妨尝试这种方式进行集成。Cropper.jsAPI 也非常丰富,支持旋转、缩放、限制裁剪区域等扩展能力,可以根据业务需求进行进一步封装。

如果你在实践过程中有任何疑问或更好的扩展思路,欢迎在评论区留言,最后希望大家 一键三连 给博主一点点鼓励!


前端技术专栏回顾:

01【前端技术】 ES6 介绍及常用语法说明
02【前端技术】标签页通讯localStorage、BroadcastChannel、SharedWorker的技术详解
03 前端请求乱序问题分析与AbortController、async/await、Promise.all等解决方案
04 前端开发中深拷贝的循环引用问题:从问题复现到完美解决
05 前端AJAX请求上传下载进度监控指南详解与完整代码示例
06 TypeScript 进阶指南 - 使用泛型与keyof约束参数
07 前端实现视频文件动画帧图片提取全攻略 - 附完整代码样例
08 前端函数防抖(Debounce)完整讲解 - 从原理、应用到完整实现
09 JavaScript异步编程 Async/Await 使用详解:从原理到最佳实践
在这里插入图片描述


文章转载自:

http://e54vgFmt.jfjsj.cn
http://Ovy8tAaK.jfjsj.cn
http://5CWIWAr2.jfjsj.cn
http://tuayDrbd.jfjsj.cn
http://MAj1QyrN.jfjsj.cn
http://ZkUFi8GN.jfjsj.cn
http://OVE1lQt4.jfjsj.cn
http://c0k4OyqO.jfjsj.cn
http://iCVFEaRI.jfjsj.cn
http://0SKcGcda.jfjsj.cn
http://RWi6f6QC.jfjsj.cn
http://Fgh34dPF.jfjsj.cn
http://pEE1bTO4.jfjsj.cn
http://zDKcy0Dx.jfjsj.cn
http://RhJrQIdw.jfjsj.cn
http://PHZZ1rrz.jfjsj.cn
http://iWX1f8Cq.jfjsj.cn
http://vbVYmKpk.jfjsj.cn
http://P0OONzZR.jfjsj.cn
http://DNNeS9YX.jfjsj.cn
http://if5IC9T6.jfjsj.cn
http://d76KRUWP.jfjsj.cn
http://av4ClrqE.jfjsj.cn
http://tsrUGHwN.jfjsj.cn
http://ESdjRBsw.jfjsj.cn
http://xDqGhp5S.jfjsj.cn
http://IpJWBdMs.jfjsj.cn
http://FrYXMCPY.jfjsj.cn
http://OO2L9O6U.jfjsj.cn
http://U2zUFPzG.jfjsj.cn
http://www.dtcms.com/wzjs/719696.html

相关文章:

  • 长沙诚信做网站手机怎么建立自己网站
  • 只想怎样建设自己的销售网站外贸网站建设怎么选
  • 微网站 报价水木网站建设
  • 网站建设市场价新建的网站只能用临时域名打开
  • 佛山响应式网站设计成都访问公司网站
  • wordpress 美化网站广州短视频代运营
  • 涞源县住房和城乡建设局网站网站备案的服务器
  • 网络公司网站样本收录情况
  • 网站托管维护长沙建设局网站
  • 建设网站模块需要哪些中拓网络科技有限公司
  • 投资5万的小型加工厂seo系统是什么意思
  • 吉林省电力建设总公司网站alexa排名是什么意思啊
  • vps 网站攻击ip地址四库一平台查询系统
  • 如何在360做网站SEO菏泽哪里做网站
  • 算命网站建设自己的网站怎么做app
  • 连江建设局网站盘点国内免费云服务器
  • 对网站建设和维护好学吗东莞网站建设全过程
  • 南通公司建站模板个人做网站法律风险
  • 手机微网站建设多少钱叫别人做网站需要注意什么问题
  • 网站外包开发 代码的版权问题上海营销网站建设
  • 婚庆设计网站模板设计师做帆布包网站
  • python做网站显示表格怎么加快网站打开速度
  • 网站建设推广费计入什么科目手机网站设计尺寸毫米
  • 武隆网站建设联系电话wordpress 带水印
  • 网站建设项目的结论学敏网站建设
  • 动态商务网站开发与管理网站左侧分类菜单怎么做
  • 如何优化网站关键词不同类型网站优势
  • 北京网站建设公司有哪些郑州网站建设公
  • 上海韵茵网站建设网站服务器 免费的吗
  • 海口云建站模板discuz应用中心打不开