React 拖动图片

简介: React 拖动图片
import React, { useState } from 'react'
import '../css/main.css'
import DraggAble from 'react-draggable'
export default function Main() {
    const imglist = [
        "https://img1.baidu.com/it/u=1684598772,1969123139&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500",
        "https://img1.baidu.com/it/u=3457625930,3138307770&fm=253&fmt=auto&app=138&f=JPEG?w=752&h=500",
        "https://img0.baidu.com/it/u=726620871,4203188840&fm=253&fmt=auto&app=120&f=JPEG?w=1280&h=800",
        "https://img2.autotimes.com.cn/news/2021/10/1011_171448907707.jpg",
        "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F5e5cf9d0-e396-4620-88a0-d44a1b9298f4%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1684896739&t=8c4cabbc7503378703d28497e8129991",
    ]
    const [ximg, setXimg] = useState('')
    const [xinp, setXinp] = useState('')
    const [conlist, setConlist] = useState([])
    const [stcc, setStcc] = useState(2)
    const [iid, setIid] = useState(-1)
    //选择照片
    const xuan = (con, ind) => {
        setXimg(con)
        setIid(ind)
    }
    //输入框
    const xuaninp = (con) => {
        // console.log('con', con)
        setXinp(con)
        // if (ximg != '') {
        //     setStcc(1)
        // }
    }
    //提交
    const addlist = (e) => {
        // console.log('ximg,xinp', ximg, xinp)
        console.log('e', e)
        let con = conlist
        if (con.length >= 4) {
            alert("数量超出")
        } else {
            con.push({ img: ximg, con: xinp, id: new Date().getTime(),xm:Math.random()*(355-100),ym:Math.random()*(350-120) })
            setConlist(con)
            setStcc(2)
            setIid(-1)
        }
        setXimg('')
        setXinp('')
    }
    //删除
    const delcon = (did) => {
        console.log('did', did)
        let list = [...conlist]
        let ind = list.findIndex(item => item.id == did)
        console.log('ind', ind)
        list.splice(ind, 1)
        setConlist(list)
    }
    const [sid, setSid] = useState(false)
    const [kid, setKid] = useState(0)
    //回填
    const showconed = (con) => {
        console.log('con', con, conlist)
        setKid(con.id)
        let ind = imglist.findIndex(item => item == con.img)
        console.log('indssss', ind)
        setIid(ind)
        setSid(!sid)
        setXimg(con.img)
        setXinp(con.con)
    }
    //修改
    const upcon = () => {
        let list = [...conlist]
        setIid(-1)
        let ind = list.findIndex(item => item.id == kid)
        console.log('key', list, ind)
        list[ind].con = xinp
        list[ind].img = ximg
        setConlist(list)
        setXimg('')
        setXinp('')
        setSid(!sid)
    }
    const dragcon = () => {
        console.log("111");
    }
    console.log('conslist', conlist)
    const dragstart = (e) => {
        console.log('e', e)
    }
    const draged = () => {
        console.log("结束");
    }
    return (
        <div>
            <div className='matop'>
                许愿墙
            </div>
            <div className='macon'>
                <input value={xinp} onChange={(e) => xuaninp(e.target.value)} />
                <div className='mimg'>
                    {imglist.map((item, index) => {
                        return (
                            <img key={index} src={item} style={{ border: iid == index ? "2px solid red" : "" }} onClick={() => xuan(item, index)} />
                        )
                    })}
                </div>
                {xinp === '' && ximg === '' ? (<div className='ss' disabled={!stcc} >
                    再想想
                </div>) : (
                    !sid ? (<div className='xy' onClick={(e)=>addlist(e)}>
                        许愿
                    </div>) : (<div className='up' onClick={upcon}>
                        修改
                    </div>)
                )}
            </div>
            <div className='malist'>
                {conlist.map(item => {
                    return (
                        <DraggAble key={item.id} defaultPosition={{x:Math.random()*100,y:Math.random()*100}}>
                            <div className='maitem'  >
                                <span className='con'>{item.con}</span>
                                <img src={item.img} onDoubleClick={() => showconed(item)} />
                                <span className='del' onClick={() => delcon(item.id)}>×</span>
                            </div>
                        </DraggAble>
                    )
                })}
            </div>
        </div>
    )
}
相关文章
|
11月前
|
前端开发 JavaScript API
获取react中iframe的里面的图片
获取react中iframe的里面的图片
274 1
|
存储 缓存 前端开发
Antd Upload + React-Cropper 实现图片自定义区域剪裁并上传功能
通过Upload组件结合react-Cropper实现图片的裁剪上传组件封装,剖析antd-img-crop源码实现的逻辑,对自己封装的组件进行进一步优化,改造!
4046 0
Antd Upload + React-Cropper 实现图片自定义区域剪裁并上传功能
|
4月前
|
前端开发
React 仿淘宝图片放大镜功能
React 仿淘宝图片放大镜功能
|
4月前
|
前端开发
react 实现图片懒加载
react 实现图片懒加载
|
4月前
|
前端开发
20行代码,封装一个 React 图片懒加载组件
20行代码,封装一个 React 图片懒加载组件
|
6月前
|
前端开发
React基础语法03-引入本地图片和服务器图片的方法
React基础语法03-引入本地图片和服务器图片的方法
47 0
|
前端开发 Android开发 iOS开发
react native 实现图片预览 图片保存 react-native-image-zoom-viewer
图片 预览,和保存 功能 应该是很常见的APP 功能 。实现起来也很简单。 这里用到的组件是:https://github.com/ascoders/react-native-image-viewer 看下新效果图: [图片上传中.
6375 0
|
9月前
|
前端开发
React/Umi中实现移动端滑动图片验证功能
React/Umi中实现移动端滑动图片验证功能
176 0
|
9月前
|
前端开发 API 容器
React Draggable 实现图片拖拽
React Draggable 实现图片拖拽
305 0
|
9月前
|
前端开发
react图形图片验证码重新请求图片不刷新
react图形图片验证码重新请求图片不刷新