javascript - 为什么onmouseout不执行??
ringa_lee
ringa_lee 2017-04-11 09:18:10
[JavaScript讨论组]

window.onload=function(){

    var op = document.getElementById('p');
    var timer= null;

    op.onmouseover=function(){
        startMove1();    
    }
    op.onmouseout=function(){
        startMove2();
    }

    function startMove1(){
      clearInterval(timer);
      timer=setInterval(function(){
          if(op.offsetLeft==0){
            clearInterval(timer);
          }else{
            console.log(111);
            op.style.left=op.offsetLeft+10+'px';
          }             
      },30);
    }

    
    function startMove2(){
      clearInterval(timer);
      timer=setInterval(function(){
          if(op.offsetLeft==-150){
            clearInterval(timer);
          }else{
            op.style.left=op.offsetLeft-10+'px';
          }             
      },30);
    }

  }
  
  

<p id="p">

<p id="p1">分享到</p>

</p>

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
PHPz

问题1:

你是改变元素的 left 属性实现动画效果,至少 #p 元素是绝对或者固定定位的

问题2:

你在 mouseover 上结束动画的条件是 left 为 0,此外都是移动的。那么是不是说 left 默认不能设置为 0,否则你的动画不会运行。

问题3;

mouseout 上结束动画的条件是 left 为 -150, 按你每次 +10 和 -10 的移动方式,那么 left 默认设置必须是 10 或者 10 的倍数



ringa_lee

谁说onmouseout没有执行呢???你可以在事件中加一个console.log打印看看,分别是执行的很好。我想你的问题是为什么op就不动呢?
是啊,它为什么就不动呢?明明有设置它的位置的op.style.left=op.offsetLeft-10+'px';

这要涉及到CSS的问题,因为当前op的的定位方式是“流模式”,它的定位同浏览器实时计算所得,JS代码无法更改它的位置。如果你想要看看效果,可以把定位方式设置为position:absolute即可。刷新页面可以看到你的p在跳来跳去。

迷茫

首先,你的onmouseout的确是执行了的,只是你的style在js控制后你没有看到效果
根据的你代码我脑补你是要让你的p移动对吧,如果你要让css的left生效的话就一定要给这个元素添加position属性才能让left有效:

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号