自己写下拉复选框组件

本文介绍了一个自定义的下拉复选框组件的实现过程,包括使用HTML和JavaScript来创建组件,实现多选功能,以及通过数据回显和事件处理来确保用户体验。组件采用ul li结构,利用flex布局或定位进行样式调整,并提供了回显数据和切换显示隐藏的方法。代码示例展示了组件的基本功能,鼓励进一步优化,如增加文字点击触发和鼠标悬停效果。
摘要由CSDN通过智能技术生成

需求:下拉框,能够支持多个选择

如图,样式自己可以调整

思路:

1、需要一个最外层,包裹放值得输入框以及下拉组件

2、可以用flex布局,上下放输入框和下拉组件,也可以定位下拉组件

3、下拉组件用的ul li,li里包裹着input类型为checkbox的框,以及span展示值,这里有点需要优化,点当行应该都选中框,现在是点框才勾选

4、默认值是当前价,可以存一个全局变量,value=['0'],也可以在存一个值得data=['当前价'],后端要的是0这种形式也就是value,前端展示在框的是data这样的数据,当然也可以用对象[{value:'0',name:'当前价'}]这种数据结构存,也比较正规一些,我这里用二个数组来说明

5、拿到data值后,要回显到框里,并且要自动勾选符合的框,回显框里的值可以用data.join(','),框可以取li 下面的input,遍历元素,把input的value值和data或者value对比,这里看你存的什么,比如data.includes*(input.value)为true,input.checked = true,就把框选中了

  • 下面看一下代码

下拉组件数据

listData={
   '0':'当前价',     //默认显示
   '1':'成交总量',
   '2':'成交总额',
   '3':'持仓量',
   '8':'开盘价',
   '9':'最高价',
   'a':'最低价',
   'd':'多档委买卖价量',
   'e':'多档委买卖价'
}

  • html
  1. 整个结构图参考

 

<div class="right push_fields">
    <input type=&#
下面是一个使用原生JS实现框选功能的例子,你可以在React中将其包装成组件: ```javascript import React, { useEffect, useRef, useState } from 'react'; import './SelectBox.css'; const SelectBox = ({ children, onSelect }) => { const [selection, setSelection] = useState({ top: 0, left: 0, width: 0, height: 0 }); const [startPos, setStartPos] = useState({ x: 0, y: 0 }); const [dragging, setDragging] = useState(false); const containerRef = useRef(null); useEffect(() => { const handleMouseMove = (e) => { if (dragging) { const currentPos = { x: e.clientX, y: e.clientY }; const width = Math.abs(currentPos.x - startPos.x); const height = Math.abs(currentPos.y - startPos.y); const left = Math.min(currentPos.x, startPos.x); const top = Math.min(currentPos.y, startPos.y); setSelection({ top, left, width, height }); } }; const handleMouseUp = (e) => { setDragging(false); onSelect({ ...selection }); setSelection({ top: 0, left: 0, width: 0, height: 0 }); }; document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', handleMouseUp); return () => { document.removeEventListener('mousemove', handleMouseMove); document.removeEventListener('mouseup', handleMouseUp); }; }, [dragging, onSelect, selection, startPos]); const handleMouseDown = (e) => { e.preventDefault(); setDragging(true); setStartPos({ x: e.clientX, y: e.clientY }); }; const containerStyle = { position: 'relative', }; const selectionStyle = { position: 'absolute', backgroundColor: 'rgba(0, 0, 255, 0.2)', border: '1px dashed blue', ...selection, }; return ( <div className="container" ref={containerRef} onMouseDown={handleMouseDown} style={containerStyle}> {children} {dragging && <div className="selection" style={selectionStyle} />} </div> ); }; export default SelectBox; ``` 这个组件将子组件包裹在一个容器中,并在容器中实现了框选功能。当用户按下鼠标左键并拖动时,组件会计算出框选区域的位置和大小,并用一个半透明的矩形覆盖在子组件上。当用户松开鼠标左键时,组件会调用`onSelect`回调函数,并将框选区域的位置和大小作为参数传递给它。 你可以像使用普通的`div`组件一样使用`SelectBox`组件。例如,你可以这样: ```javascript import React from 'react'; import SelectBox from './SelectBox'; const App = () => { const items = [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, { id: 3, name: 'Item 3' }, { id: 4, name: 'Item 4' }, { id: 5, name: 'Item 5' }, ]; const handleSelect = (selection) => { console.log(selection); }; return ( <SelectBox onSelect={handleSelect}> {items.map((item) => ( <div key={item.id} style={{ marginBottom: 10 }}> <input type="checkbox" onChange={() => {}} /> <span style={{ marginLeft: 10 }}>{item.name}</span> </div> ))} </SelectBox> ); }; export default App; ``` 在这个例子中,我们将一个复选框列表作为子组件传递给`SelectBox`组件,并在`handleSelect`回调函数中打印出框选区域的位置和大小。当用户用鼠标左键框选一个或多个复选框时,组件会调用`handleSelect`回调函数,并将框选区域的位置和大小作为参数传递给它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值