原生JS实现彩票36选7不重复(优化)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>36选7</title>
<script>
//先循环36个数,放到num里面
//给按钮添加事件
//点击的时候 随机7个数放到jg里面
var btn = null,
    num = null,
    jg = null;
    
    window.onload = function(){
        init();
        initDom();
        event();
    }
//初始化变量
    function init(){
        btn = document.getElementById("btn");
        num = document.getElementById("num");
        jg = document.getElementById("jg");
    }
//初始化页面元素的值
    function initDom(){
        var str = "";
        for(var i = 1 ;i<37;i++){
            str += i + ",";
        }
        str = str.substr(0,str.length-1);  //把36个数字组成的字符串的最后一个元素删除
        num.innerHTML = str;
    }
//添加事件
    function event(){
        btn.onclick = xuanze;
    }
//点击按钮的时候调用方法
    function xuanze(){
        //随机七个数放到结果里面
        var str = "";
        var n = 0;
        for(var i = 0 ;i<7;i++){
            n++;
            var zhi = parseInt(Math.random()*36)+1;
            console.log(str.indexOf(zhi));
            if(str.indexOf(zhi) == -1){  
                str += zhi+",";
            }else{
                i--;
            }
        }
//        jg.innerHTML = str+";总共循环了"+n+"次";
        jg.value = str+";循环了"+n+"";
    }
</script>
</head>

<body>
<!--页面部分-->
<div id="num"></div>
<button id="btn">选择</button>
<!--结果为:<span id="jg"></span>-->
结果为:<input type="text" width="1000px" id="jg" value="">
</body>
</html>

 

转载于:https://www.cnblogs.com/lsqbk/p/10258967.html

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用原生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、付费专栏及课程。

余额充值