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

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

附加到光標然后返回到原始位置

附加到光標然后返回到原始位置

婷婷同學_ 2023-04-01 17:22:46
我試圖做到這一點,以便在將鼠標懸停在一個 div 上時,該 div 的子項附加到光標上,當您離開該 div 時,該子項返回到其原始位置。這是我到目前為止所擁有的:$('div').each(function() {          var img = $(this).find( "figure" );    var offset = img.offset();    var originLeft = offset.left;    var originTop = offset.top;    $('div').mousemove(function(e) {            img.addClass('active');        img.css({              transform: 'translateX(' + (e.pageX - originLeft/2 ) + 'px) translateY(' + (e.pageY - originTop) + 'px)'            });    }).mouseleave(function() {            img.removeClass('active');        img.css({              transform: 'translateX(0) translateY(0)'            });    });});div {     height: 250px;    width: 250px;    background: #eee;}div:nth-child(2) {  background: #ccc;}figure {  display: block;  height: 50px;  width: 50px;  background: blue;  margin: 0;  transition: transform 500ms ease;}.active {   transition: none; }<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><div>    <figure></figure></div><div>    <figure></figure></div>問題是,如果頁面上有多個事件,它就不起作用,而且 mouseleave 事件似乎有問題:有時它需要一秒鐘或者在返回到原始位置之前有一些閃爍。
查看完整描述

2 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

使用 mouseenter 添加 mousemove 偵聽器并在 mouseleave 中將其刪除可以解決大部分問題。另一部分是,如果圖像離開容器時鼠標正下方,則鼠標仍在 child 上方。


相對于鼠標向圖像位置添加一些額外的偏移量有助于消除其余的錯誤


$('div').on('mouseenter', function() {

  var img = $(this).find("figure");

  var offset = img.offset();

  var originLeft = offset.left;

  var originTop = offset.top;

  // only listen to move on this instance

  $(this).mousemove(function(e) {

    img.addClass('active').css({

      transform: 'translateX(' + (e.pageX - originLeft / 2) + 'px) translateY(' + (e.pageY+10  - originTop) + 'px)'

    });

  })


}).on('mouseleave', function() {

  // remove the mousemove listener

  $(this).off('mousemove').find("figure").removeClass('active').css({

    transform: 'translateX(0) translateY(0)'

  });

});

div {

  height: 150px;

  width: 150px;

  background: #eee;

  margin-bottom: 30px

}


div:nth-child(2) {

  background: #ccc;

}


figure {

  display: block;

  height: 50px;

  width: 50px;

  background: blue;

  margin: 0;

  transition: transform 500ms ease;

}


.active {

  transition: none;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div>

  <figure></figure>

</div>



<div>

  <figure></figure>

</div>


查看完整回答
反對 回復 2023-04-01
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您的問題在這一行:


$('div').mousemove(function(e) {

將其更改為:


$(this).on('mousemove', function(e) {

那是因為您需要解決每個循環中您所在的當前 div 元素:


$('div').each(function() {

片段:


$('div').each(function() {

  var img = $(this).find( "figure" );

  var offset = img.offset();

  var originLeft = offset.left;

  var originTop = offset.top;

  $(this).on('mousemove', function(e) {

      img.addClass('active');

      img.css({

          transform: 'translateX(' + (e.pageX - originLeft/2 ) + 'px) translateY(' + (e.pageY - originTop) + 'px)'

      });

  }).on('mouseout', function(e) {

      img.removeClass('active');

      img.css({

          transform: 'translateX(0) translateY(0)'

      });

  });

});

div {

    height: 250px;

    width: 250px;

    background: #eee;

}


div:nth-child(2) {

    background: #ccc;

}


figure {

    display: block;

    height: 50px;

    width: 50px;

    background: blue;

    margin: 0;

    transition: transform 500ms ease;

}

.active {

    transition: none;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div>

    <figure></figure>

</div>



<div>

    <figure></figure>

</div>


查看完整回答
反對 回復 2023-04-01
  • 2 回答
  • 0 關注
  • 391 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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