javascript - HTML - 影响固定元素的主体旋转

标签 javascript html css transform fixed

我有一个 Javascript 函数,用于摇动屏幕大约一秒钟。

function shakeScreen() {
    var degrees = 0;
    var goal = 0;
    var goals = [5,-5,4,-4,3,-4,2,-2,1,-1,0];
    function frame() {
        if(goals[goal] < 0) {
            degrees -= 1;
        } else {
            degrees += 1;
        }
        get('body','tag');
        current[0].style.transform = 'rotate(' + degrees + 'deg)';
        if(degrees === goals[goal]) {
            goal += 1;
            if(goal === goals.length) {
                clearInterval(intervalId);
            }
        }
    }
    var intervalId = setInterval(frame,16);
}

在我的 HTML 正文中,我的第一个元素有一个固定的位置。此元素是一个向用户显示消息的弹出窗口,它有一个固定位置,因此如果最终用户向下或向上滚动页面,它会出现在屏幕上的相同位置。这是 HTML 的片段:

<body>
<div id='fade' onclick="fade('out')"><div id='alert'></div></div>
<!-- more unrelated content -->

这是上面指定元素的 CSS:

#fade {
    z-index: 2750;
    position: fixed; /*important*/
    display: none;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    background-color: rgba(0, 0, 0, 0);
    text-align: center;
}
#fade:hover {
    cursor: pointer;
}

当执行 Javascript 函数 shakeScreen() 时,fade 元素会错位并移动到主体的顶部,而不是留在最终用户屏幕的中央。这是 JSFiddle:https://jsfiddle.net/turkey3/ug9zx1d2/3/向下滚动一半,您会看到一个按钮。单击该按钮可摇动屏幕。您会注意到瞬间fade 元素开始出现在屏幕中央,但在开始晃动后移动到顶部。此外,要查看我想要的效果,请注释掉设置函数内的 shakeScreen 函数,然后运行代码。

编辑:fade 元素只是一个深色背景。 alert 元素是一个白框,其中包含向用户显示的消息。

最佳答案

解决方案

我发现最好的方法不是旋转 body 元素,而是将所有其他代码包装在一个 div 中并摇动分区而不是整个 body。之后,提示信息正确显示在屏幕中央。这是固定代码:https://jsfiddle.net/turkey3/ug9zx1d2/4/

这是包装在 div 中的 HTML:

<body>
<div id='fade' onclick="fade('out')"><div id='alert'></div></div>
<div id='shake'>
    <!-- more unrelated content -->
</div>

并更新了 JS:

function shakeScreen() {
    var degrees = 0;
    var goal = 0;
    var goals = [5,-5,4,-4,3,-4,2,-2,1,-1,0];
    function frame() {
        if(goals[goal] < 0) {
            degrees -= 1;
        } else {
            degrees += 1;
        }
        get('shake','id');
        current.style.transform = 'rotate(' + degrees + 'deg)';
        if(degrees === goals[goal]) {
            goal += 1;
            if(goal === goals.length) {
                clearInterval(intervalId);
            }
        }
    }
    var intervalId = setInterval(frame,16);
}

关于javascript - HTML - 影响固定元素的主体旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31395203/

相关文章:

javascript - 从距离矩阵获取变量,Google map v3

html - 设计页面的 CSS 技巧

javascript - HTML 渲染后初始化时,iFrame 不加载 src

html - 如何保留编号列表的缩进?

javascript - 是在 jQuery 中使用多个事件委托(delegate)还是在 on 中使用 if inside 更好?

javascript - 我如何将tinymce加载到ID-element中几次?

javascript - 我如何使用模糊功能进入下一个选项卡

google-chrome - 如何使用css3 flexbox创建不垂直扩展的多列布局?

html - Bootstrap 4 beta 轮播箭头位于 slider 区域之外

javascript - 如何在动态包含 div 后加载 js .click