react 手寫地址左滑動刪除功能

展現主要文件address addressitemjavascript

代碼以下:css

address jsx 文件java

import React,{Component} from 'react'
import AddressItem from './AddressItem'
import {List,Icon,NavBar} from 'antd-mobile'

import './style.css'
class Address extends Component {

    render() {
        return (
            <div className="address-content">
                <NavBar
                    icon={<Icon type="left" />}
                    mode="dark"
                    onLeftClick={() => this.props.history.goBack()}
                >地址管理</NavBar>

                <List>
                    <List.Item  arrow="horizontal">新增收穫地址</List.Item>
                </List>
                <div className="address-list">
                    <AddressItem />
                    <AddressItem />
                </div>
            </div>
        )
    }

}

export default Address

 address css 文件:react

.address-content .address-list{
    padding-top: 10px;
}

 addrressitem jsx 文件web

import React,{Component} from 'react'

import './style.css'



class AddressItem extends Component {

    render() {
        return (
            <div className="address-item">
                <ul className="address" ref="address-dom">
                    <li>
                       中華人民共和國廣東省廣州市
                    </li>
                    <li>
                        <strong>carey一步</strong> 133xxxxxxxx
                    </li>
                </ul>
                <p className="handle" ref="handle">
                    <span>刪除</span>
                </p>
            </div>
        )
    }
    componentDidMount() {
        const maxOffset = this.refs.handle.clientWidth;
        const addressDom = this.refs['address-dom'];

        let offsetL = 0, startTime = 0,startX = 0,startOffset = 0;
        var startHandler = function(event) {
            startTime = Date.now();
            startX = event.touches[0].pageX;
            offsetL = 0;
        }
        var moveHandler = function(event) {
            event.preventDefault();
            let currentOffset = event.touches[0].pageX - startX;
            if((currentOffset > 0 && startOffset === 0)
                || (currentOffset < 0 && startOffset === -maxOffset)) {
                startX = event.touches[0].pageX;
                offsetL = startOffset;
            }else {
                if(Math.abs(currentOffset) > maxOffset){
                    offsetL = -maxOffset - startOffset + (maxOffset + currentOffset) * 0.05
                }else {
                    offsetL = currentOffset + startOffset
                }
            }

            addressDom.style.webkitTransition = "-webkit-transform 0s ease-out";
            addressDom.style.webkitTransform = "translate3d("+offsetL+"px,0,0)";
        }
        var endHandler = function(event) {
            addressDom.style.webkitTransition = "-webkit-transform 0.2s ease-out"
            startOffset = offsetL = Math.abs(offsetL) > maxOffset/2 ? -maxOffset : 0;
            addressDom.style.webkitTransform = "translate3d("+offsetL+"px,0,0)";

        }

        addressDom.addEventListener('touchstart',startHandler,false);
        addressDom.addEventListener('touchmove',moveHandler,false);
        addressDom.addEventListener('touchend',endHandler,false);
    }
}

export default AddressItem;

 addressitem  css 文件antd

.address-item {
    position: relative;
    border-top: 1px solid #dddddd;
    border-bottom: 1px solid #ddd;
    margin-top: -1px;
    box-sizing: border-box;
}
.address-item .address {
    position: relative;
    padding: 15px 50px 15px 40px;
    background: #fff;
    margin: 0;
    z-index: 2;
}
.address-item .address li {
    line-height: 18px;
    padding: 2px 0;
}
.address-item .handle{
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
    margin: 0;
    background-color: #ff3b2f;
    color: #fff;
    width: 70px;
    margin: 1px;
    text-align: center;
    position: absolute;
    right: 0;
    top: 0;
    bottom: 0;
    z-index: 1;
}
相關文章
相關標籤/搜索