CSS & JS 制作滚动幻灯片

==================纯CSS方式====================

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            * {
                padding: 0px;
                margin: 0px;
            }

            .show-box {
                height: 800px;
                /*背景固定*/
                background-attachment: fixed;
                /*图像居中*/
                background-position: center;
                /*背景遮盖*/
                background-size: cover;
            }
        </style>
    </head>

    <body>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/GreaterFlamingos_ZH-CN13656214069_1920x1080.jpg);">
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/LacsdesCheserys_ZH-CN10032851647_1920x1080.jpg);">
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/MadeiraTrails_ZH-CN11087101725_1920x1080.jpg);">
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/VaranasiBoat_ZH-CN8290748524_1920x1080.jpg);">
        </div>
    </body>

</html>

仔细看背景切换的方式,是不是类似于层叠起来的效果,这全依赖于CSS3的background-attachment: fixed;样式,它的作用是将背景图像固定在窗口中,于是背景就不会随着页面滚动啦,虽然原理很简单,但效果很漂亮呢。

唯一的不足是,每一个div的高度是固定的,对于不同的显示器呈现的效果可能会不一样,所以接下来我们使用JavaScript来对页面进行优化。

==================CSS&JS方式==================

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            * {
                padding: 0px;
                margin: 0px;
            }

            .show-box {
                /*与body高度一致*/
                height: 100%;
                background-attachment: fixed;
                background-position: center;
                background-repeat: no-repeat;
                background-size: cover;
            }
        </style>
        <script type="text/javascript">
            window.onload = function() {
                var body = document.getElementsByTagName("body")[0];
                body.style.height = window.innerHeight + "px"; //设置body高度

                var new_pos, old_pos = 0;

                /*页面滚动事件*/
                window.onscroll = function() {
                    var screen = window.innerHeight; //窗口内部高度
                    var scroll = document.body.scrollTop; //获取页面滚动高度
                    if(scroll == 0) { //初始化滚动位置
                        old_pos = 0;
                    }
                    if((scroll % screen) + 50 > screen) { //滚动至接近位置时
                        new_pos = Math.ceil(scroll / screen);
                        if(new_pos != old_pos) {
                            document.body.scrollTop = new_pos * screen; //滚动到最合适的位置
                        }
                        old_pos = new_pos;
                    }
                }
            }
        </script>
    </head>

    <body>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/GreaterFlamingos_ZH-CN13656214069_1920x1080.jpg);">
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/LacsdesCheserys_ZH-CN10032851647_1920x1080.jpg);">
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/MadeiraTrails_ZH-CN11087101725_1920x1080.jpg);">
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/VaranasiBoat_ZH-CN8290748524_1920x1080.jpg);">
        </div>
    </body>

</html>

通过JavaScript会自动调整展示区的大小,并且能在滚动的同时自动展示,由于这种体验不太好展示,这里就不截图了,运行这里的代码就能看到效果了。

这种方式还可以再继续优化,比如让JavaScript的自动滚动更加平缓,可以使用JQuery实现,这里就不继续深究了。

==================幻灯片效果==================

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            * {
                padding: 0px;
                margin: 0px;
                font-family: "微软雅黑";
            }

            .show-box {
                height: 100%;
                background-attachment: fixed;
                background-position: center;
                background-repeat: no-repeat;
                background-size: cover;
                position: relative;
            }

            .show-text {
                width: 50%;
                height: auto;
                padding: 20px;
                background-color: rgba(0, 0, 0, 0.6);
                position: absolute;
                bottom: 0px;
            }

            .show-text h2 {
                color: white;
                font-size: 18px;
            }

            .show-text p {
                color: white;
                line-height: 1.5em;
                font-size: 14px;
                margin: 10px 0px;
            }

            .show-text a {
                color: white;
                padding: 6px 12px;
                border: 1px solid white;
                background: none;
                display: inline-block;
                text-decoration: none;
            }
        </style>
        <script type="text/javascript">
            window.onload = function() {
                var body = document.getElementsByTagName("body")[0];
                body.style.height = window.innerHeight + "px";

                var new_pos, old_pos = 0;

                /*页面滚动事件*/
                window.onscroll = function() {
                    var screen = window.innerHeight;
                    var scroll = document.body.scrollTop;
                    if(scroll == 0) {
                        old_pos = 0;
                    }
                    if((scroll % screen) + 50 > screen) {
                        new_pos = Math.ceil(scroll / screen);
                        if(new_pos != old_pos) {
                            document.body.scrollTop = new_pos * screen;
                        }
                        old_pos = new_pos;
                    }
                }
            }
        </script>
    </head>

    <body>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/GreaterFlamingos_ZH-CN13656214069_1920x1080.jpg);">
            <div class="show-text" style="left: 0px;">
                <h2>粉红色的鸟精灵</h2>
                <p>要说自然界什么动物最让人眼前一“亮”,那肯定要数大火烈鸟了。这个周身红色的大型鹳鸟,总是用一种给人感觉高傲的身姿伫立在水间,十分耀眼。这些披着红色大衣的鸟类时而在水中游泳,时而徜徉在浅滩,悠闲安详的神态给人感觉高傲而不可接近。</p>
                <a href="##">大火烈鸟</a>
            </div>
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/LacsdesCheserys_ZH-CN10032851647_1920x1080.jpg);">
            <div class="show-text" style="right: 0px;">
                <h2>欧洲屋脊下的小镇</h2>
                <p>虽然雪总是会带给人寒冷的感觉,但是雪山却是让人感叹不已的美丽景观。看这纯白美丽的雪山,气势磅礴,玲珑秀丽,仿佛可以让周围的一切都染上白色的外衣。山脚下静谧的湖水也不由的被这美丽所折服,映出雪山的娇媚身姿。白与蓝的搭配,让人看了心醉。</p>
                <a href="##">霞慕尼</a>
            </div>
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/MadeiraTrails_ZH-CN11087101725_1920x1080.jpg);">
            <div class="show-text" style="left: 0px;">
                <h2>不可错过的火山岛</h2>
                <p>在非洲西海岸,坐落着有着“大西洋明珠”美誉的马德拉群岛,它隶属于葡萄牙。这是一座秀丽的火山岛,可供人登陆的部分是整个火山区的四分之一。岛上覆盖着密林,有着无数僻静的山间小径,这里还有被列入联合国世界遗产的月桂树林生态系统,是个适合徒步旅行的岛屿。</p>
                <a href="##">马德拉群岛</a>
            </div>
        </div>
        <div class="show-box" style="background-image: url(http://s.cn.bing.net/az/hprichbg/rb/VaranasiBoat_ZH-CN8290748524_1920x1080.jpg);">
            <div class="show-text" style="right: 0px;">
                <h2>踏足古老而神秘的印度</h2>
                <p>印度是个古老而神秘的国度,这里的人们尊称恒河为“圣河”和“印度的母亲”。虔诚的印度教徒一生至少必须到恒河净身一次。所以千百年来,朝圣者的足迹遍布了恒河两岸。众多神话故事和宗教传说也以这里为背景,形成了独特的风土人情。</p>
                <a href="##">瓦拉纳西</a>
            </div>
        </div>
    </body>

</html>

幻灯片展示

时间: 2024-10-18 06:05:06

CSS & JS 制作滚动幻灯片的相关文章

JS连续滚动幻灯片:原理与实现

什么是连续滚动幻灯片?打开一些网站的首页,你会发现有一块这样的区域:一张图片,隔一段时间滑动切换下一张:同时,图片两端各有一个小按钮,供你手动点选下一张:底部有一排小圆圈,供你选定特定的某帧图片.这就是“连续滚动幻灯片”(我自己的叫法,当然它也可能叫焦点轮播图,轮播图等等等等),本文单讲手动连续切换,不涉及自动播放和底部小圆圈. 实现这种幻灯片有几个难点: 1.图片放置:你需要把所有图片放入一个div(这里就把它的class叫做pics吧)中,再把pics放入一个更大的div(就命名为conta

利用css+js制作下拉列表

利用文本框来制作,可以不影响给后台传数据.<!DOCTYPE html> <html> <head> <style> *{margin:0; padding:0; border:0;} body{font-family:"微软雅黑";} .in{width:150px; height:30px; cursor:pointer; position:relative;} .in .choose{width:120px; height:30px

css+jQuery制作的文字循环滚动代码

css+jQuery制作的文字循环滚动代码,尺寸只需要在css中调整即可,另外别忘记在function里面修改相关参数 百度网盘下载

利用css+原生js制作简易钟表

利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期以及时间,至于钟表上的刻度.数字等元素,因为量比较多,采用jvascript生成 <!doctype html> <html> <head> <meta charset="UTF-8"> <link rel='stylesheet' h

一款CSS+JS+DIV制作的蓝色风格tab滑动门

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>一款CSS+JS+DIV制作的蓝色风格ta

强大的CSS:scroll-snap滚动事件停止及元素位置检测

一.Scroll Snap是前端必备技能 CSS Scroll Snap是个非常好用的特性,可以让网页容器滚动停止的时候,无需任何JS代码的参与,浏览器可以自动平滑定位到指定元素的指定位置.类似幻灯片广告效果就可以纯CSS实现. 而且CSS Scroll Snap的兼容性非常好,移动端几乎可以放心使用. 二.源自实际项目的scroll-snap场景 今天下午在实现一个功能需求的时候,正好遇到一个场景非常适合使用Scroll Snap来实现,滑动依次显示人物角色.于是就大胆使用了下,哇,好棒,无需

使用reveal.js制作酷炫的页面

几天前遇到一个制作3D幻灯片效果的插件,试着用到自己的在线简历页面中,展示效果蛮好的.不过查阅了很多文档,几乎都是英文,于是想着整理一下写一篇博客当总结. 准备工作: 1.首先当然是下载相应reveal的资源,下载链接:https://github.com/hakimel/reveal.js 2.将相应的文件夹(css.is.lib.plugin)引入到自己的工作目录,目录层次如下:(忽略我的imgs文件夹~~) 下面就可以着手写自己的页面啦~ <!doctype html> <html

现代 JavaScript 与 CSS 令人着迷滚动实现指南

一些(网站)滚动的效果是如此令人着迷但你却不知该如何实现,本文将为你揭开它们的神秘面纱.我们将基于最新的技术与规范为你介绍最新的 JavaScript 与 CSS 特性,(当你付诸实践时,)将使你的页面滚动更平滑.美观且性能更好. 大多数的网页的内容都无法在一屏内全部展现,因而(页面)滚动对于用户而言是必不可少的.对于前端工程师与 UX 设计师而言,跨浏览器提供良好的滚动体验,同时符合设计(要求),无疑是一个挑战.尽管 web 标准的发展速度远超从前,但代码的实现往往是落后的.下文将为你介绍一些

js页面滚动时层智能浮动定位实现:

案例展示: 第一个:每个人都有看过的淘宝页面: 案例就不多说了,有兴趣的可以多去找找, 这样的智能浮动效果还是不错的,挺方便. 基本的实现原理: 首先有一个默认状态就是没有滚动的时候,什么事情也不用做,定位可以是absolute,也可以是stati,fixed,relartive 这些都可以.我们主要需要关注的是当浏览器滚动的时候,(要浮动的块)要移除浏览器界面视区的时候,修改其position属性,让其浮动在窗口的上沿显示就可以了.最好的position属性就是fixed了,可以在IE6+和其