React解决点击小图用对话框放大图片(通过e.target.nodeName)

最近两周一直在忙,忙H5页面,忙项目更替,以至于上上周一测试提的Bug到现在才算解决完。

这是同事在很早以前写的一段程序,在系统的 个人中心 里有 我的动态 这么一个模块,里面显示的内容是文字+图片。不得不吐槽一下,首页有个差不多的模块,为啥首页能正常显示而个人中心却要弄个这么大个图。

15329393-fadb69017fe080b5.png
图片太大以至于看不懂是“什么鬼”

话不多说,直接来到代码部分。先把样式调整成合适的比例,找到对应的样式文件,修改宽高和左间距。

15329393-d0145c7b71910951.png
样式文件
15329393-c62c65799ae89086.png
样式修改后的效果

下面我们看一下图片是通过什么方式写到页面里面去的。

15329393-00e044711c5b357a.png
用字符串拼接的图片

本人比较耿直,一开始想到的最直接暴力的方法就是在`<img />`里面加onClick呗,但不知道是我一开始就错了还是猜的全没碰对,以至于到最后我放弃了在img元素里加方法来获取每张图片的src。大家都知道在反单引号里面可以通过${}来拿到值放到字符串里做拼接,但是要引用方法还真是挺为难的(不能普通的字符串拼接和两对反单引号做拼接的情况下)。既然不能把onClick放到img上,那就放它的父元素上吧(最后不知道怎么想出来的一个办法)。

15329393-e65ccd61369e1882.png
在父元素上添加onClick方法,e做参数
15329393-4bffcdd712fa677d.png
具体方法

敲黑板,第二个 if 是重点。因为我们的onClick是放在<img>所在的父元素<div>上的,所以用户点击父元素的任何一个角落都会触发同一个事件。于是要加以区分,只有让用户点在<div>的<img>上方法才去作用,否则啥事都不发生。具体可以在方法里先console.log(e.target.nodeName)看看,如果点在图片外的部分返回的是“DIV”,而点在图片上返回的则是“IMG”,这就是我们要找的区别。

以上就是我在这个Bug中遇到的坑,总结下来就是:不要试图直接在反单引号上加事件,可以加到父元素上去。下面贴一下通过antd的Modal实现对话框显示大图片的过程:

导入Modal:

15329393-9b899ebaa79e2953.png

组件初始化,设isShow控制对话框的显示,imgSrc存放对话框总图片地址:

15329393-4900ed00a26e8343.png

将Modal的JSX放到render的return里面:

15329393-02fe01152cf6f02f.png

调用到的方法写在render的外面(因为footer被我设置成null了,所以onOk和onCancel没有用到,用到的话这样写就行了):

15329393-ddc3afa2dadfa884.png

最后看一下点击图片弹出对话框的效果是啥样:

15329393-f71b59dea98b2915.png
放大的效果

坑填完啦,继续改Bug呀。坐等过年(八卦一下大家过年放假几天?)

猜你喜欢

转载自blog.csdn.net/weixin_34198762/article/details/86897252
今日推荐