【问题标题】:How can I start over a offset(); function repeatedly如何从偏移量()开始;反复发挥作用
【发布时间】:2018-01-06 15:00:23
【问题描述】:

所以我花了很多时间编写这段代码,它可以工作,但我无法修复的唯一错误是让它反复循环。任何人都可以就问题及其解决方案提出一些建议吗?

 <h1 id="heading">Hello</h1>

 var offsetLeft = 0;
 var offsetTop = 0;
 var offsetLeftReverse = 200;
 var offsetTopReverse = 200;

 var moveHeading = function () {
     $("#heading").offset({ left: offsetLeft, top: offsetTop});

    if(offsetLeft < 200){
        offsetLeft++;
    } else if (offsetTop < 200){
        offsetTop++;
    }
 };

var moveHeadingReverse = function () {
     $("#heading").offset({ left: offsetLeftReverse, top: offsetTopReverse});

    if(offsetLeftReverse > 0 ){
        offsetLeftReverse--;
    } else if (offsetTopReverse > 0){
        offsetTopReverse--; 
    } 
 };

var engine = function () {
   if ( (offsetTop === 0 && offsetLeft <= 200) || (offsetTop < 200 && offsetLeft === 200) ){
        moveHeading(); 
    } 
   else if ( (offsetTopReverse === 200 && offsetLeftReverse <= 200) || (offsetTopReverse <= 200 && offsetLeftReverse === 0) &&
            ( offsetTopReverse != 0 || offsetLeftReverse != 0 ) ){
       moveHeadingReverse();
       console.log("reverse");
       console.log(offsetTopReverse,offsetLeftReverse);
    } 
}

var start = setInterval(engine, 5); 

【问题讨论】:

  • 你能补充一点你的代码应该做什么的细节吗?可以通过代码来理解,但我认为没有人愿意这样做。
  • 它应该向右移动 200 像素,向底部移动 200 像素,向左移动 200 像素,向开始的位置移动 200 像素。问题是我不能让它自动移动,它只会做一个圆圈。
  • 我认为在这种情况下,当反向移动完成且无事可做时,您必须在 moveHeadingReverse 内部的某个地方拨打 moveHeading 的电话
  • 你有没有尝试过?
  • 是的,我尝试了很多东西,最方便的是添加一个 else 语句 offsetLeft = 0; var offsetTop = 0; var offsetLeftReverse = 200; var offsetTopReverse = 200;

标签: javascript jquery function if-statement offset


【解决方案1】:

试试这个:你必须处理偏移量为 0 的情况,然后将你的变量重置为启动状态,然后再次调用引擎(为你做了间隔):

var engine = function () {
   if ( (offsetTop === 0 && offsetLeft <= 200) || (offsetTop < 200 && offsetLeft === 200) ){
        moveHeading(); 
    } 
   else if ( (offsetTopReverse === 200 && offsetLeftReverse <= 200) || (offsetTopReverse <= 200 && offsetLeftReverse === 0) &&
            ( offsetTopReverse != 0 || offsetLeftReverse != 0 ) ){
       moveHeadingReverse();
       console.log("reverse");
       console.log(offsetTopReverse,offsetLeftReverse);
    } else if ( offsetTopReverse === 0 && offsetLeftReverse === 0) {
        offsetLeft = 0;
            offsetTop = 0;
            offsetLeftReverse = 200;
            offsetTopReverse = 200;
    }
}

查看小提琴:https://jsfiddle.net/yfp9f70g/

【讨论】:

  • 嘿,非常感谢,我的主要想法就是这样,但如果我一直在使用 else 但它不起作用,则不是 else。谢谢。
  • 很高兴这可以帮助你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多