介紹
一個鼠標框選的react組件,支持單個單元點擊、移入移除等回調等,任意數量單元內容編輯,自定義設置類名等功能
Gifs
Usage
1 import Selection from 'react-box-selection' 2 3 const content = [...Array(7)].map((item, row) => { 4 return [...Array(14)].map((item, col) => { 5 const data = Math.floor(Math.random() * 100 + 1) 6 const tmp = <h3 key={`${row}-${col}`}>{data}</h3> 7 return tmp 8 }) 9 }) 10 11 class App extends React.Component { 12 state = {} 13 14 componentWillUnmount () { 15 this.setState = () => { } 16 } 17 18 mounted = all => { //all items(dom) 19 console.log(all) 20 } 21 selected = (positions, items, all) => { //data-position(array of string),selected items(array of dom) 22 console.log(positions) 23 } 24 singleSelected = (position, item, all) => { //data-position(string),selected items(dom) 25 console.log(position) 26 } 27 hovered = (position, item) => { 28 console.log(position) 29 } 30 leaved = (position, item) => { 31 console.log(position) 32 } 33 34 render () { 35 36 return ( 37 <div> 38 <Selection 39 cols={24} 40 rows={48} 41 width={30} 42 height={50} 43 gap={10} 44 wrapperScroll={undefined} 45 onMounted={this.mounted} 46 onHovered={this.hovered} 47 onLeaved={this.leaved} 48 onSelected={this.selected} 49 onSingleSelected={this.singleSelected} 50 itemClass='selection_item' 51 extraClass={['extra_1', 'extra_2']} 52 activeClass='selection_item_active' 53 > 54 {content} 55 </Selection> 56 </div> 57 ) 58 } 59 }
params
參數名 | 默認值 | 是否必要 | 作用 |
---|---|---|---|
cols | 24 | × | 列 |
rows | 7 | × | 行 |
height | 50px | × | 單個單元高 |
width | 30px | × | 單個單元寬 |
gap | 0 | × | 單元間距 |
wrapperScroll | body的scrollTop & scrollLeft | × | 指定的外層元素的scrollTop & scrollLeft |
Children | - | × | 自定義任意單元子節點 支持jsx組件 |
onMounted | - | × | 掛載完成時的回調 |
onHovered | - | × | 單個單元鼠標移入的回調 |
onLeaved | - | × | 單個單元鼠標移出的回調 |
onSelected | - | × | 框選多個單元的回調 |
onSingleSelected | - | × | 單個點擊或框選單個單元的回調 |
itemClass | selection_item | × | 類 |
extraClass | [] | × | 額外的類 |
activeClass | selection_item_active | × | 激活狀態下的類 |