Отслеживать положение другого элемента - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть внутренний круг, который отслеживает положение моего указателя. Теперь я хочу, чтобы цвет круга менялся при наведении на тег h2.

Может кто-нибудь помочь ??

Iпопытался выполнить поиск в нескольких местах, но все они были наведены на указатель мыши.

примечание: только когда внутренний круг зависает на h2, а не на указателе мыши, цвет внутреннего круга должен измениться.

<!doctype>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Roll Over Eyes</title>
        <style>
            body
            {
                display: flex;
                align-items: center;
                justify-content: center;
                height: 900px;
                border: 1px solid black;
            }
            .main-circle
            {
                display: flex;
                align-items: center;
                justify-content: center;
                position: relative;
                height: 350px;
                width: 350px;
                border: 1px solid black;
                border-radius: 10%;                
            }
            #inner-circle
            {
                position: absolute;
                height: 50px;
                width: 50px;
                border: 1px solid black;
                border-radius: 50%;
                background: #af4b23;
            }
            .message
            {
                display:none;
                width: 75%;
            }
        </style>
    </head>
    <body>
        <div class="main-circle">
            <div id="inner-circle">
            </div>
            <h2 class="message">Your Outside the box</h2>
            <h2 class="message">Your inside the box, now move the mouse to move the circle.</h2>
        </div>
        <script>
            (function()
            {
                var ele= document.getElementById("inner-circle");
                var hea= document.getElementsByClassName("message");                
                var body=document.body;
                var height=body.clientHeight;
                var width=body.clientWidth;
                var move = function(event)
                {
                var x= event.clientX;
                var y= event.clientY;
                ele.style.left = ( x/width )*300;
                ele.style.top = ( y/height )*300;              
                }
                var display = function()
                {
                    console.log("done");
                    hea[0].style.display="inline-block";
                    hea[1].style.display="none";

                }
                var hide = function()
                {
                    console.log("done hiden");
                    hea[0].style.display="none";
                    hea[1].style.display="inline-block";

                }
                var effect = function()
                {
                    ele.style.backgroundColor= "rgba(0,0,0,0.5)";
                }
                var deflt = function()
                {
                    ele.style.backgroundColor= "#af4b23";
                }
                body.addEventListener("mousemove",function(){ move(event) },false);
                body.addEventListener("mouseout",display,false);
                body.addEventListener("mouseover",hide,false); 
                hea[1].addEventListener("mouseover",effect,false); 
                hea[1].addEventListener("mouseout",deflt,false);               

            })();
        </script>
    </body>
</html>

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете попробовать это:

 (function()
          {
              var ele= document.getElementById("inner-circle");
              var hea= document.getElementsByClassName("message");                
              var body=document.body;
              var height=body.clientHeight;
              var width=body.clientWidth;
              var move = function(event)
              {
                var x= event.clientX;
                var y= event.clientY;
                ele.style.left = ( x/width )*300;
                ele.style.top = ( y/height )*300; 
                var e_pos = ele.getBoundingClientRect();
                var h_pos = hea[1].getBoundingClientRect();
                if(e_pos.bottom>=h_pos.top && e_pos.top<=h_pos.bottom && e_pos.right>=h_pos.left && e_pos.left<=h_pos.right){
                  ele.style.backgroundColor= "rgba(0,0,0,0.5)";
                }else{
                  ele.style.backgroundColor= "#af4b23";
                };
              }
              var display = function()
              {
                  //console.log("done");
                  hea[0].style.display="inline-block";
                  hea[1].style.display="none";

              }
              var hide = function()
              {
                  //console.log("done hiden");
                  hea[0].style.display="none";
                  hea[1].style.display="inline-block";
              }

              body.addEventListener("mousemove",function(){ move(event) },false);
              body.addEventListener("mouseout",display,false);
              body.addEventListener("mouseover",hide,false); 
          })();

в этом ответе я задаю background-color после установки left и top из ele.также я удалил два последних eventListeners.

Посмотрите на результат онлайн и измените его самостоятельно!

граница добавлена ​​для определения границ h2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...