Open Manjushaka opened 6 years ago
数字格式化:
function formatNumber(num, precision, separator) { var parts; // 判断是否为数字 if (!isNaN(parseFloat(num)) && isFinite(num)) { // 把类似 .5, 5. 之类的数据转化成0.5, 5, 为数据精度处理做准, 至于为什么 // 不在判断中直接写 if (!isNaN(num = parseFloat(num)) && isFinite(num)) // 是因为parseFloat有一个奇怪的精度问题, 比如 parseFloat(12312312.1234567119) // 的值变成了 12312312.123456713 num = Number(num); // 处理小数点位数 num = (typeof precision !== 'undefined' ? num.toFixed(precision) : num).toString(); // 分离数字的小数部分和整数部分 parts = num.split('.'); // 整数部分加[separator]分隔, 借用一个著名的正则表达式 parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + (separator || ',')); return parts.join('.'); } return NaN; }
formatNumber(10000) "10,000" formatNumber(10000, 2) "10,000.00" formatNumber(10000.123456, 2) "10,000.12" formatNumber(10000.123456, 2, ' ') "10 000.12" formatNumber(.123456, 2, ' ') "0.12" formatNumber(56., 2, ' ') "56.00" formatNumber(56., 0, ' ') "56" formatNumber('56.') "56" formatNumber('56.a') NaN
导入文件(react版本):
html部分: <input ref={(fileNode) => { this.fileNode = fileNode; }} type="file" name="stockList" className="stock-file" accept=".txt, .csv, .xlsx, .xls" onChange={this.handleChangeInputFile} onClick={this.handleClickInputFile} /> js部分: handleClickUpload = (e) => { e.stopPropagation(); this.fileNode.click(); }; handleClickInputFile = (e) => { e.stopPropagation(); }; handleChangeInputFile = (e) => { e.stopPropagation(); const formData = new FormData(); const file = e.currentTarget.files[0]; const { groupId, onUploadStocksSuccess } = this.props; formData.append('stockFile', file, file.name); callApi(`/stockGroup/${groupId}/import`, { method: 'POST', data: formData, processData: false, contentType: false, }).then((response) => { this.fileNode.value = ''; if (response && response.response === true) { onUploadStocksSuccess(groupId); } else { this.props.configMessage(); message.warning('批量添加股票失败,请稍后重试'); } }); };
复制到剪贴板: // 由于document.execCommand('copy')方法仅仅可以用于input textarea等输入标签的选取,所以如果需要剪贴的文字是js字符串,就需要临时构建一个input标签赋值,然后销毁。 参考文章原文链接: JavaScript复制内容到剪贴板的两种常用方法
handleCopy2Clipboard = record => { const { link, id } = record; const input = document.createElement('input'); document.body.appendChild(input); // input.setAttribute('readonly', 'readonly'); input.setAttribute('value', link); input.select(); // input.setSelectionRange(0, 9999); if (document.execCommand('copy')) { document.execCommand('copy'); } document.body.removeChild(input); };
一些注意点:在Chrome下调试的时候,这个方法时完美运行的。然后到了移动端调试的时候,坑就出来了。ios。(1)点击复制时屏幕下方会出现白屏抖动,仔细看是拉起键盘又瞬间收起。知道了抖动是由于什么产生的就比较好解决了。既然是拉起键盘,那就是聚焦到了输入域,那只要让输入域不可输入就好了,在代码中添加 input.setAttribute('readonly', 'readonly'); 使这个 是只读的,就不会拉起键盘了。(2)无法复制。这个问题是由于 input.select() 在ios下并没有选中全部内容,我们需要使用另一个方法来选中内容,这个方法就是 input.setSelectionRange(0, input.value.length);。
节流throttle,在一段时间内,会每隔一段时间调用一次 窗口调整resize 页面滚动scroll 抢购疯狂点击mousedown
数字格式化:
导入文件(react版本):
复制到剪贴板: // 由于document.execCommand('copy')方法仅仅可以用于input textarea等输入标签的选取,所以如果需要剪贴的文字是js字符串,就需要临时构建一个input标签赋值,然后销毁。 参考文章原文链接: JavaScript复制内容到剪贴板的两种常用方法
一些注意点:在Chrome下调试的时候,这个方法时完美运行的。然后到了移动端调试的时候,坑就出来了。ios。(1)点击复制时屏幕下方会出现白屏抖动,仔细看是拉起键盘又瞬间收起。知道了抖动是由于什么产生的就比较好解决了。既然是拉起键盘,那就是聚焦到了输入域,那只要让输入域不可输入就好了,在代码中添加 input.setAttribute('readonly', 'readonly'); 使这个 是只读的,就不会拉起键盘了。(2)无法复制。这个问题是由于 input.select() 在ios下并没有选中全部内容,我们需要使用另一个方法来选中内容,这个方法就是 input.setSelectionRange(0, input.value.length);。