用react模仿知乎的用户头像裁剪组件

前段时间刷知乎的时候,更换换了下头像,突然发现知乎头像编辑器很简洁酷炫,于是乎就用react尝试模仿做一个组件。

知乎上的这个是用canvas处理的,但是用div做也是可以,简单的布局一下,其实就是用几个div而已,但是呢,有个点我这里的。阴影层下的图片跟清晰的图片是两张图片,只是用top,left定位让这两张图片看起来像一张图片。

这个组件首先是要用到拖拽的功能,网上找的包感觉都不太合适,于是自己就简单封装了一个,现在已经发布到npm(react-simple-draggable),githup地址。

由于我封装的拖拽组件可以限定的拖拽的区域,所以就可以很容易的动态设置,拖拽显示的无非就是图片大小的区域,初始化的时候,规定宽或者高是100%,高度或者宽度自适应,因为图片为长方形的时候,有横向的和竖向的,我们可以一开始获取图片的宽高,判断是横向的还是竖向的

除此之外,还要获取到图片的真实大小的size,因为要是提交的使用总不能把,‘100%’,‘auto’这些提交到后端。

完成初始化的逻辑并不太复杂,下面到放大缩小的逻辑了。放大缩小的逻辑其实也很简单,无非就是把放大缩小的比例乘于原始的宽度,但是放大缩小后的图片的可拖拽区域也要发生变化:

至于为什么加上要用80(图片的中点)去乘于比值的差(preRatio是前一次拖拽的比例)是为了让图片放大缩小是以图片中心的位置为原点,这样视觉效果会好看很多。此外,这里还处理了一些特殊的情况,比如说,缩放的时候,图片的位置可能会不在可视区的区域内,所以要做一些限制,当left的绝对值小于图片的宽度时,就是偏离了可视区域,这里要做一下修正。

如果想使用这个组件可以clone下来,参考demo中的例子,把lib下的文件复制到你的项目中就可以使用了(这个组件已经打包好了),但是出现问题作者概不负责- -!您也可以基于作者的基础再做修改(src文件夹下),每次修改记得npm run build(npm start 是打包demo) 打包下哦!

这个小组件已经上传到githup上了,这里是demo的地址,这里是githup的地址,欢迎提issue!路过希望帮忙点个star哦!

日积月累,一起成长!

原文https://zhuanlan.zhihu.com/p/67155526

用react模仿知乎的用户头像裁剪组件相关推荐

  1. cropbox php,jQuery用户头像裁剪插件cropbox.js实例分享

    本文主要为大家详细介绍了jQuery用户头像裁剪插件cropbox.js的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家. 几乎每一个网页是必备图片上传,图片裁剪功能,这 ...

  2. 头像裁剪框html css,GitHub - saintic/layui-cropper-avatar: Layui头像裁剪组件

    layui-cropper-avatar Layui头像裁剪组件 说明 这是一款适用于Layui的[微改整合]第三方组件,基于cropper 3.1.3,实现点击一个按钮弹出裁剪框,完成选择.裁剪图片 ...

  3. vue-avatar-tailor,vue头像裁剪组件

    项目简介 本组件是vue下的头像裁剪组件,可以直接拷贝代码使用,无需安装依赖 使用九宫格进行裁剪,自由选择裁剪区域. 实时预览裁剪后效果. 可以将裁剪好的图片,导出为封装好的file文件,直接上传到服 ...

  4. iOS 图片裁剪(用户头像裁剪)

    图片裁剪 把一张图片裁剪为指定的样式,比如常见的用户头像 思路: 在图片的基础上绘制时,需要创建一个位图上下文 确定裁剪区域(超出裁剪区域的都将被清除) 绘制图片 从位图上下文中获取图片 关闭上下文 ...

  5. 微信小程序获取用户头像昵称组件封装(最新版)

    一.前言 微信小程序将在2022年11月08日对获取用户头像昵称信息的API再一次进行改动,这次的改动比较大. 更多详情查看公告:公告直达链接 我的项目比较多,而且大部分都是只需要获取用户的头像以及昵 ...

  6. WPF实现用户头像裁剪

    WPF开发者QQ群: 340500857 前言 需要做一个用户选择头像并进行裁剪. 欢迎转发.分享.点赞,谢谢大家~.   效果预览(更多效果请下载源码体验): 一.MainWindow.xaml代码 ...

  7. 头像裁剪框html css,CSS3 clip-path实现的用户头像裁剪效果

    HTML 导入代码模板: Susan Sanddollar Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa sunt p ...

  8. 编写一个头像裁剪组件(一)

    需求是编写一个头像剪裁工具再封装成为一个组件,然后根据功能开始逐步编写代码:先是上传图片 => 预览图片 => 编辑图片. 刚开始没有去考虑兼容性的问题,直接编写upload部分的代码,参 ...

  9. mysql 存储用户头像_node+vue用户头像处理上传并保存

    2017年7月14日19:21:29 ,最近做个网站,需要有用户头像裁剪上传功能,具体流程是用户在本地选择图片,前端将图片裁剪好发给后端,后端接收到图片将它保存起来,并将信息存入数据库. 先说一下环境 ...

最新文章

  1. mysql密码有格式要求吗_高考日语作文10个格式要求!你能看出图中5处错误吗?...
  2. [mysql] mysql-myibatis-整理
  3. poj2104(区间第k大+离散化)
  4. Linux下区分物理CPU、逻辑CPU和CPU核数
  5. python 编程语言排行榜_2019年6月编程语言排行榜:Python 排名飙升,三年内有望超越Java...
  6. python3 输入输出_Python3基础之输入和输出实例分析
  7. LeetCode 1257. 最小公共区域(最小公共祖先)
  8. 先富带动后富:雷军带领一大批程序员发家致富
  9. 【刷题】LOJ 6007 「网络流 24 题」方格取数
  10. request用法_urllib的基本用法
  11. 插件开发之360 DroidPlugin源码分析(四)Activity预注册占坑
  12. Atitit jOrgChart的使用  组织架构图css html
  13. redhat 安装 snort
  14. mysql数据库库推荐书籍
  15. ERP系统多少钱一套?不同情况详情分析告诉你!
  16. ArcGIS之经纬度表格数据转矢量
  17. 【旁门Python 01】什么是wheel包,如何去用它?
  18. web前端基础——过渡效果
  19. Utility Manager 的一些基本使用
  20. 简述DRAM与SRAM的区别

热门文章

  1. 「小程序JAVA实战」小程序视频处理工具ffmpeg(47)
  2. 让一切随风--------2016年中总结
  3. 工厂供电,供配电技术,工厂供电系统,电厂供配电模拟实训系统
  4. linux内核打印前有buildroot,[教程]使用buildroot完全自定义自己的embedded linux系统(nand)...
  5. jQuery 使用slideToggle()滑动显示隐藏
  6. Ubuntu创建虚拟桌面
  7. html js写法,js判断写法.html
  8. 红领巾是什么不重要,绿领巾是什么,很重要
  9. Dou学网-抖音带货Dou+投放技巧
  10. OSChina 除夕乱弹 —— 陪伴