亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在按鈕內包含元素

在按鈕內包含元素

料青山看我應如是 2022-06-05 16:41:39
在我的 React 項目中,我有一個使用 Javascript 跟隨光標的球,并且只有當它使用這個 css 塊懸停在按鈕元素上時才會出現:#app button:hover + .ball {  display: block;}.ball {  display: none;}它目前有效,但是我正在嘗試找出一種將球包含在按鈕內的方法。現在,如果您將鼠標懸停在按鈕的邊緣上,球就會延伸到按鈕之外。
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

如果將button和.ball元素放在某種容器 div 中,則可以overflow:hidden在容器上進行:


內render:


<div className="button-container">

  <button>BUTTON</button>

  <div ref={ballRef} className="ball"></div>

</div>

在樣式表中:


.button-container {

  position: relative;

  display: inline-block;

  overflow: hidden;

}

let mouseX = 0

let mouseY = 0

let ballX = 0

let ballY = 0

let speed = 0.2


const Page = () => {

  const ballRef = React.useRef(null)

  const animate = React.useCallback(() => {

    if (ballRef && ballRef.current) {

      let distX = mouseX - ballX

      let distY = mouseY - ballY

      ballX = ballX + distX * speed

      ballY = ballY + distY * speed

      ballRef.current.style.left = ballX + "px"

      ballRef.current.style.top = ballY + "px"

    }

    requestAnimationFrame(animate)

  }, [ballRef, mouseX, mouseY, ballX, ballY])


  React.useEffect(() => {

    const onMouseMove = event => {

      mouseX = event.pageX

      mouseY = event.pageY

    }


    document.addEventListener("mousemove", onMouseMove)


    animate()


    return () => document.removeEventListener("mousemove", onMouseMove)

  }, [])  


 return (

   <React.Fragment>

     <div className="button-container">

       <button>BUTTON</button>

       <div ref={ballRef} className="ball"></div>

     </div>

     <div class="divs"></div>

     <div class="divs"></div>

   </React.Fragment>

  );

}


ReactDOM.render(<Page/>, document.querySelector('#app'));

#app button:hover + .ball {

  display: block;

}


.button-container {

  position: relative;

  display: inline-block;

  overflow: hidden;

}


.ball {

  display: none;

}


button{

  background-color: green;

  padding: 20px;

}


.ball {

  background-color: red;

  width: 26px;

  height: 26px;

  border-radius: 50%;

  position: absolute;

  top: 0;

  left: 0;

  transform: translate(-50%, -50%);

  mix-blend-mode: screen;

  transition: transform 0.4s, border 0.4s;

  border: 2px solid transparent;

  pointer-events: none;

}


.divs{

  background-color: gray;

  padding:20px;

  margin:20px 0;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.1/umd/react.production.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.1/umd/react-dom.production.min.js"></script>


<div id="app"></div>


查看完整回答
反對 回復 2022-06-05
  • 1 回答
  • 0 關注
  • 86 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號