为了账号安全,请及时绑定邮箱和手机立即绑定

如何使jQuery setinterval在移动中更流畅?

如何使jQuery setinterval在移动中更流畅?

潇潇雨雨 2021-04-09 14:15:21
对不起,英语不好。这里是网站的链接。我的任务是创建没有滚动的网站。当用户单击屏幕的右侧部分时,汽车开始向前移动。当它到达屏幕中间时,汽车停下来,固定的内容块开始朝相反的方向移动。如果用户将光标移到屏幕左侧(按住鼠标按钮的同时),则汽车应向后移动。桌面版本按预期工作。但是移动版本很慢。(这并不是很慢,我猜它还不如台式机那么顺畅)我该怎么解决这个问题?在touchstart事件上,我获得event.pageX值来检查屏幕用户触摸过的部分。(这样我就知道汽车应该向哪个方向移动)并将此值存储在变量“ mousePos”中。然后我用运动函数调用setInterval在touchend事件中,我清除了间隔以阻止汽车行驶。在touchmove上,我将使用新的event.pageX值重写“ mousePos”变量。例如:用户单击,汽车开始移动,如果用户将光标向左移动,我将使用此变量来检查方向并向后转汽车。在mouseMove功能中,我将检查汽车的位置并决定应采取的措施-移动汽车或移动背景,然后我将检查其是否到达终点事件:   $(document).on('mousedown touchstart', '.mouse-click', function(event){        clicking = true;        mousePos = event.pageX;        if ( event.target.className == 'helper' ) {            showModal();        } else {            moveStuff = setInterval(mouseMove, 1);        }    });    $(document).on('mouseup touchend', function(){        clicking = false;        carLights.removeClass('blink');        clearInterval(moveStuff);    })    $(document).on('mousemove touchmove', '.mouse-click', function(event){        if(clicking == false) {            return;        } else {            mousePos = event.pageX;        }    });功能:    function mouseMove() {        let offset = parseInt( mainContent.css('left') );        let offsetCar = parseInt( car.css('left') );        if ( mousePos > middleScreen ) {            carLights.removeClass('blink');            if ( offset < - ( contentWidth ) ) {                return;            } else {                rotateWheelsForward();                if ( offsetCar < middleScreen ) {                    car.css('left', (offsetCar + mouseSpeed) + 'px');                } else {                    mainContent.css('left', (offset - mouseSpeed) + 'px');                }            }        } else if ( mousePos < middleScreen ) {            carLights.addClass('blink');            if ( offset > 0 ) {                carLights.removeClass('blink');                return;            } 那么,如何在移动设备中使运动更流畅?(我使用iphone 5s野生动物园,但在iphone 6中进行了测试,但效果仍然很差)我应对此代码进行哪些更改?
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

我建议使用变换而不是位置,例如:左,最上面的原因确实影响了层的重排-重绘。(明智地)使用requestAnimationFrame执行平滑的事件动画,例如滚动,mouseup或任何其他事件。

然后使用will-change: transform;将来会“转换”的元素。这将创建新层,并为以后的元素更改做准备。

就我而言,相对位置会影响重排或渲染工具镶边上的绿色闪烁。因此,我更喜欢使用固定/绝对位置来防止这种情况。

这是一篇很棒的文章,可让您通过requestAnimationFrame获得更清晰,更真实,更快速的动画,以及如何使用CSS实现60 fps动画


查看完整回答
反对 回复 2021-04-22
  • 1 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信