侧边横幅动画效果

我们在写页面的时候,常见的侧边横幅广告是通过position:fixed实现的,这样定位的好处是无论主体内容怎么变化,侧边的位置永远保持不变,当然,这也是这种效果的弊端,网页效果死板单一,所以,我们今天就要为这种侧边横幅添加一个动画效果。

具体的实现思路是,也是通过定位,但不是position:fixed,而是position:absolute,这种定位的效果是保持距离最近的position:relative的元素的距离不变,所以当外层元素滚动时,该元素也会随之滚动和发生位置变化,下面我们来实现这种效果。

首先是要写出基本的样式结构:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
            border:none
        }

        #aside{
            width: 150px;
            position: absolute;
            left: 0;
            top: 150px;
        }

        #aside img{
            width: 100%;
        }

        p{
            height: 50px;
            text-align: center;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div id="aside">
        <img src="images/float.jpg" alt="">
    </div>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
    <p>好好学习,天天向上</p>
</body>
</html>

其次,既然是涉及到滚动,就需要用到前面封装的滚动函数和获取元素的方法

function scroll() {
    if(window.pageYOffset !== null){
        return {
            top: window.pageYOffset,
            left: window.pageXOffset
        }
    }else if(document.compatMode === "CSS1Compat"){ // W3C
        return {
            top: document.documentElement.scrollTop,
            left: document.documentElement.scrollLeft
        }
    }

    return {
        top: document.body.scrollTop,
        left: document.body.scrollLeft
    }
}

function $(id) {
    return typeof id === "string" ? document.getElementById(id) : null;
}

最后就是分析动画效果了。

上面紫色的就是我们的横幅广告,在最开始通过定位给定了位置以后,它距离顶部的位置可以通过offsetTop获得;当浏览器滚动后,浏览器向上滚动了scrollTop的高度,那么该横幅广告也向上滚动了这么多的高度,如果我们希望在滚动结束时,该元素能回到最初的位置,也就是距离浏览器顶部offsetTop高度的位置,该位置距离其父元素的高度为offsetTop与scrollTop之和,我们需要在滚动结束时,将该元素的定位的值赋予前面的两者之和即可,并添加动画效果,这样,既能保证横幅的位置不变,又能增强动画效果。

window.onload = function () {
        // 1. 获取广告头部的高度
        var offset_top = $(‘aside‘).offsetTop;

        // 2. 监听窗口的滚动
        var begin = 0, end = 0, timer = null;
        window.onscroll = function () {
            // 2.0 清除定时器
            clearInterval(timer);

            // 2.1 获取滚动的高度
            var scroll_top = scroll().top;
            end = offset_top + scroll_top;

            // 2.2 缓动动画
            timer = setInterval(function () {
                 begin = begin + (end - begin) * 0.2;
                 $("aside").style.top = begin + "px";

                console.log(begin, end);
                // 清除定时器
                if(Math.round(begin) === end){
                    clearInterval(timer);
                }

            }, 20);
        }
    }

完整详细代码下载:点这里

原文地址:https://www.cnblogs.com/yuyujuan/p/9665409.html

时间: 2024-08-10 15:05:01

侧边横幅动画效果的相关文章

iOS点击查看大图的动画效果

对于图片来说,除了表情包,几乎都会被点击查看大图.今天就讲解一个查看和收起大图的动画效果,先直接看效果图: 如图所示,最开始是一个小图,点击小图可以查看大图.大图会从小图的位置和大小"弹"出来,同时背景变成半透明的阴影.点击大图或者阴影后,收起大图,同样地弹回到小图去,同时去掉阴影背景,就像是一张图片在伸大缩小一样. 现在看看这是怎么实现的.在思考一个动画的实现方法时,把动画的动作进行分解然后再一个个去思考怎么实现是一个好的习惯,我们稍微分解一下,这个动画在显示大图和收起大图的时候做了

iOS 之动画效果

/** type *  各种动画效果  其中除了'fade', `moveIn', `push' , `reveal' ,其他属于私有的API. *  ↑↑↑上面四个可以分别使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'来调用. *  @"cube"                     立方体翻滚效果 *  @"moveIn"    

Core Animation 动画效果介绍

在开始之前呢,先了解一下UIView和CALayer大体的区别(重点列举了以下四点): UIView继承自 UIResponder,因此UIView 可以处理响应事件,而CALayer继承自NSObject,所以它只是负责内容的创建,绘制. UIView负责对内容的管理,而CALayer则是对内容的绘制 UIView中有关位置的属性只有frame.bounds.center,而CALayer除了具备这些属性之外还有anchorPoint.position. 通过修改CALayer可以实现UIVi

带感”的边框交互动画效果

  效果的原理其实就是"四条边"发生宽度和高度的变化,上下两边是宽度变化,左右两边是高度的变化: 它们发生变化的方向也可以可控的,根据坐标设置即可控制. 下面我们直接上代码: 首先准备基础代码,那四条边并不是真正的border,而是通过标签加以宽高写出来,然后定位到四个方向: <!-- html --> <div class="box"> <div class="topL"></div> <d

iOS开发 QQ粘性动画效果

QQ(iOS)客户端的粘性动画效果 时间 2016-02-17 16:50:00  博客园精华区 原文  http://www.cnblogs.com/ziyi--caolu/p/5195615.html 主题 iOS开发 qq的app中要是有新的联系人发消息过来,相应联系人的cell右边会有一个红色的圆圈表示消息条数.如果去触碰那个圆圈,可以发现它竟然会跟着手指的移动而移动. 在一定范围内,手指离开屏幕,会发现红色圆圈会自动弹性的回到原来的位置.而如果超出一定距离,这个圆圈会做一个销毁的动画,

javascript动画效果之缓冲动画(修改版)

在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one,two), 30);时,发现show里面的参数one和two无法被导入,所以需要做以下代码改进和优化 原版的html和css代码在这里javascript动画效果之缓冲动画 js代码如下 1 <script> 2 function $(id) { 3 return typeof id === &

自己动手丰衣足食,为Zepto添加Slide动画效果

一.缘由 公司的移动端项目,采用zepto为主要框架,但是zepto毕竟是精简版的jquery,体积小了,功能自然没有这么强大,特别是动画和选择器这两块,需要我们自己去拓展. 在项目开发过程中,很多页面过渡需要用到动画,简单的show/hide过渡太生硬,对用户不友好,并且移动端大多都是采用slide效果,此文主要是为zepto拓展slide动画. 二.发现 从zepto的在线文档上可以发现一个发布在github上的动画模块,但是缺少slide效果,度娘上找了找,相关的极少,只发现了一个slid

jQuery动画效果(借鉴他人的)

(1)jquery中常见的几种动画效果 (2)动画队列执行的顺序 对于一组元素上的动画效果,有如下两种情况: a) 当在一个animate()方法中应用多个属性时,动画是同时发生的. b) 当以链式的写法应用动画方法时,动画是按照顺序发生的. 对 于多组元素上的动画效果,有如下情况: a) 默认情况下,动画都是同时发生的. b) 当以回调的形式应用动画方式时,动画是按照回调顺序发生的. 另外,在动画方法中,要注意其他非动画的方法会插队,例如css()方法,要使这些非动画的 方法也按照顺序来执行,

CSS动画效果之animation

Y(^o^)Y css动画大乱弹之animation. 概述 什么是animation呢?在回答这个问题之前,先要说明什么叫做@keyframe(关键帧).@keyframe算是一个动画模板.在其中,可以使用百分比,如从0%到100%的任意值,分别在每个百分比中,加上不同的属性,从而让元素达到一种在不断变化的动画效果.这和我们制作flash动画一样,我们只需设计几个关键帧,系统就能生成动画啦! 一个@keyframe例子: 1 /*定义关键帧动画*/ 2 @keyframes myframe {