javascript – 一旦达到屏幕侧面,怎样反转移动div的方向?

前端之家收集整理的这篇文章主要介绍了javascript – 一旦达到屏幕侧面,怎样反转移动div的方向?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个绝对定位的div,它使用jQuery .animate函数从屏幕的右侧向左移动.
我的问题是,一旦div到达最左边,它会继续,最终从屏幕上消失.如何做到这一点,一旦div到达左边,它会反转并开始向右边? (然后反之亦然),右侧将不会继续向右,但一旦达到目的,再次向左移动)

HTML

<div class="container">
    <div class="block"></div>
</div>

CSS:

.block {
    float:right;
    position:absolute;
    right:100px;
    width:100px;
    height:100px;
    background:red;
}

jQuery的:

$('.block').click(function() {
    $(this).animate(
        {"right": "+=100px"},"slow");
});

这是我的JSFiddle:https://jsfiddle.net/ebkc9dzL/

谢谢我真的很感谢帮忙!

解决方法

工作小提琴: https://jsfiddle.net/ebkc9dzL/19/

您需要在点击功能之外有一个变量,它将告诉您动画的方向,因此一旦在点击功能中,您可以使用getBoundingClientRect()(mdn reference)计算动画对象的位置.

然后,如果对象向左移动,并且其左距离小于其自己的宽度,则需要将其移动到足以使其到达边缘.如果它在边缘(左边是零),你需要改变方向.

如果它正在移动,其正确的距离小于自己的宽度,则只需要移动它就足够了(由window.innerWidth – 100计算,因为100是对象的宽度),以便它到达边缘.如果它在右边,你需要改变方向.

传递给jQuery的动画功能的对象的改变方向是从其“右”属性添加或减去的一个简单问题.

var direction = "+";
$('.block').click(function() {
    var obj = {},distance = 100,rect = this.getBoundingClientRect();

    if(direction=="+"){
        if(rect.left>0 && rect.left < 100)
            distance = rect.left;
        else if(rect.left<=0)
            direction = "-";
    }
    else {
        if(rect.right >(window.innerWidth-100) && rect.right+1<window.innerWidth)
            distance = (window.innerWidth-rect.right);
        else if(rect.right+1 >=window.innerWidth){
            direction = "+";
        }
    }

    obj = {"right": direction+"="+distance.toString()+"px"}
    $(this).animate(obj,"slow");
});
原文链接:https://www.f2er.com/js/154397.html

猜你在找的JavaScript相关文章