JRoll、React滑动删除

import React, { Component } from 'react';
import '../src/css/reset.css';
import '../src/css/delete.css';
import JRoll from 'jroll';


class Mall extends Component {
  constructor(){
    super();
    this.state = {
      arr: [
        {id: '01',name:'lily1'},
        {id: '02',name:'lily2'},
        {id: '03',name:'lily3'},
        {id: '04',name:'lily4'},
        {id: '05',name:'lily5'},
        {id: '06',name:'lily6'},
        {id: '07',name:'lily7'},
        {id: '08',name:'lily8'},
        {id: '09',name:'lily9'},
        {id: '10',name:'lily10'},
        {id: '11',name:'lily11'},
        {id: '12',name:'lily12'},
        {id: '13',name:'lily13'},
        {id: '14',name:'lily14'},
        {id: '15',name:'lily15'},
        {id: '16',name:'lily16'},
        {id: '17',name:'lily17'},
        {id: '18',name:'lily18'},
        {id: '19',name:'lily19'},
        {id: '20',name:'lily20'}
      ]
    };
    this.deleteOne = this.deleteOne.bind(this);
    this.createJroll = this.createJroll.bind(this);
  }
  createJroll(){
    var w = Math.floor(document.getElementsByClassName('del')[0].offsetWidth / 2);
    console.log(w);//‘删除’按钮的一半宽度。
     // 创建外层jroll实例
    var jroll = new JRoll("#wrapper", {
        scrollBarY:true
    });

    var items = document.querySelectorAll(".item");
    var current = null; //保存当前滑开的item

    for (var i=0,l=items.length; i<l; i++) {
        // 每行创建jroll实例
        var j = new JRoll(items[i], {
            scrollX:true,
            bounce:false
        });

    j.on("scrollStart", function() {
        if (current && current !== this) {
            current.scrollTo(0, 0, 100);
            current = null;
        }
    });

    j.on("scroll", function(e) {
        if (this.x === 0 && !current) {
            this.call(jroll, e);
        } else {
            current = this;
        }
    });

    j.on("scrollEnd", function() {
        if (this.x > -w) {
            this.scrollTo(0, 0, 100);
            current = null;
        } else {
            this.scrollTo(this.maxScrollX, 0, 100);
        }
    })
  }
  //添加点击删除按钮的事件
  // for (let i=0; i<items.length; i++) {
  //   let item = items[i];
  //   let index = i;
  //   item.onclick = (e)=>{
  //     // console.log(item);
  //     if (e.target.className === "del") {
  //           console.log(item);
  //           console.log(index);
  //           item.style.display = 'none';
  //       }
  //   };
  // }
}
  deleteOne(id){
    let arr = [];
    let items = document.querySelectorAll(".item");
    for(let i = 0; i < this.state.arr.length; i ++){
      if(this.state.arr[i].id !== id){
        arr.push(this.state.arr[i]);
      }else{
        items[i].style.display = 'none';
      }
    }

    //发起请求

    this.setState({arr},()=>{
      console.log(this.state.arr);
    });
    
  }
  componentDidMount() {
    this.createJroll();
  }
render(){
  return <div id="wrapper">
  <div className="scroller">
      <div id="valid">
        {
          this.state.arr.map((item,index)=>{
            return <div key={index} className="item">
              <div className="item-scroller">
                <div className="content">列表内容</div>
                <div className="del" onClick={()=>this.deleteOne(item.id)}>删除</div>
              </div>
            </div>
          })
        }
      </div>
      <div className="invalid_tit">失效商品</div>
      <div id="invalid">
        {
          this.state.arr.map((item,index)=>{
            return <div key={index} className="item">
              <div className="item-scroller">
                <div className="content">列表内容2</div>
                <div className="del">删除2</div>
              </div>
            </div>
          })
        }
      </div>
    </div>
  </div>
}
}

class Item extends Component {
  
}


class App extends Component {
  render(){
    return <Mall />;
  }
}



export default App;

 效果图

 

 

 

 

升级版,防淘宝购物车列表删除,商品列表以店铺为单位展示(而非独立展示)

PS:这里着重展示思路,沿用之前的数据(结构)导致不能够实现删除效果,请无视。重点是‘滑动’的思路。

import React, { Component } from 'react';
import '../src/css/reset.css';
import '../src/css/delete.css';
import JRoll from 'jroll';


class Mall extends Component {
  constructor(){
    super();
    this.state = {
      arr: [
        {id: '01',name:'lily1'},
        {id: '02',name:'lily2'},
        {id: '03',name:'lily3'},
        {id: '04',name:'lily4'},
        {id: '05',name:'lily5'},
        {id: '06',name:'lily6'},
        {id: '07',name:'lily7'},
        {id: '08',name:'lily8'},
        {id: '09',name:'lily9'},
        {id: '10',name:'lily10'},
        {id: '11',name:'lily11'},
        {id: '12',name:'lily12'},
        {id: '13',name:'lily13'},
        {id: '14',name:'lily14'},
        {id: '15',name:'lily15'},
        {id: '16',name:'lily16'},
        {id: '17',name:'lily17'},
        {id: '18',name:'lily18'},
        {id: '19',name:'lily19'},
        {id: '20',name:'lily20'}
      ]
    };
    this.deleteOne = this.deleteOne.bind(this);
    this.createJroll = this.createJroll.bind(this);
  }
  createJroll(){
    var w = Math.floor(document.getElementsByClassName('del')[0].offsetWidth / 2);
    console.log(w);//‘删除’按钮的一半宽度。
     // 创建外层jroll实例
    var jroll = new JRoll("#wrapper", {
        scrollBarY:true
    });

    var items = document.querySelectorAll(".item");
    var current = null; //保存当前滑开的item

    for (var i=0,l=items.length; i<l; i++) {
        // 每行创建jroll实例
        var j = new JRoll(items[i], {
            scrollX:true,
            bounce:false
        });

    j.on("scrollStart", function() {
        if (current && current !== this) {
            current.scrollTo(0, 0, 100);
            current = null;
        }
    });

    j.on("scroll", function(e) {
        if (this.x === 0 && !current) {
            this.call(jroll, e);
        } else {
            current = this;
        }
    });

    j.on("scrollEnd", function() {
        if (this.x > -w) {
            this.scrollTo(0, 0, 100);
            current = null;
        } else {
            this.scrollTo(this.maxScrollX, 0, 100);
        }
    })
  }
  //添加点击删除按钮的事件
  // for (let i=0; i<items.length; i++) {
  //   let item = items[i];
  //   let index = i;
  //   item.onclick = (e)=>{
  //     // console.log(item);
  //     if (e.target.className === "del") {
  //           console.log(item);
  //           console.log(index);
  //           item.style.display = 'none';
  //       }
  //   };
  // }
}
  deleteOne(id){
    let arr = [];
    let items = document.querySelectorAll(".item");
    for(let i = 0; i < this.state.arr.length; i ++){
      if(this.state.arr[i].id !== id){
        arr.push(this.state.arr[i]);
      }else{
        items[i].style.display = 'none';
      }
    }

    //发起请求

    this.setState({arr},()=>{
      console.log(this.state.arr);
    });
    
  }
  componentDidMount() {
    this.createJroll();
  }
render(){
  return <div id="wrapper">
  <div className="scroller">
      <div id="valid">
        {
          //以单个商品为单位
          // this.state.arr.map((item,index)=>{
          //     return <div key={index} className="item">
          //     <div className="item-scroller" style={{minHeight: '0.3rem'}}>
          //       <div className="content">列表内容</div>
          //       <div className="del" onClick={()=>this.deleteOne(item.id)}>删除</div>
          //     </div>
          //   </div>
          // })


        //以店铺为单位1          
        this.state.arr.map((item,index)=>{
            return <div key={index}>
            <h3>店铺名称{index}</h3>
          {
            [1,2,3].map((i,n)=>
            <div key={n} className="item">
            <div className="item-scroller" style={{minHeight: '0.3rem'}}>
              <div className="content">列表内容</div>
              <div className="del" onClick={()=>this.deleteOne(item.id)}>删除</div>
            </div>
          </div>
          )
          }
            </div>;
        })

        }
      </div>
      <div className="invalid_tit">失效商品</div>
      <div id="invalid">
        {
          this.state.arr.map((item,index)=>{
            return <div key={index} className="item">
              <div className="item-scroller">
                <div className="content">列表内容2</div>
                <div className="del">删除2</div>
              </div>
            </div>
          })
        }
      </div>
    </div>
  </div>
}
}

class Item extends Component {
  
}


class App extends Component {
  render(){
    return <Mall />;
  }
}



export default App;

 

 

效果图⬇️

 

 

 

转载于:https://www.cnblogs.com/LLLLily/p/8021968.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值