两个页面之间动画的切换效果——平移、缩放、旋转等

一下面的html代码为例:

    <body>
        <article id="tablet">
            <img src="tablet.png" alt="tablet">
            <h1>Comprehensam</h1>
            <p>Mel homero labores ce maluisset sententiae qui,...s dissentiunt ad, mel atqui oblique aliquam te.</p>
            <a href="#wifi">Next</a>
        </article>
        <article id="wifi">
            <img src="wifi.png" alt="wifi">
            <h1>Adversarium</h1>
            <p>Ea qui graece facilisi persequeris. Ne est quodsi atomorum, ... autem forensibus dissentiet nec ne. Copiosae similique ex qui.</p>
            <a href="#tablet">Next</a>
        </article>
    </body>
注意以上代码和之前不同之处:

在每个 article 后面都有一个 a 标签中有 href ,显示为next。看到第一个 articlehref 等于 #wifi,其表示点击此next时,页面会跳转到第二个article页面;对第二张页面也是一样。所以,接下来,我们要把每一个article元素都显示为一张页面,这样他们之间就会相互跳转。


            html, body{
                height: 100%;  /*使得页面全屏展示*/
            }
            body{
                margin: 0;
                padding: 0;
                font-family: sans-serif;
                text-align: center;
                color: #ffffff;
                overflow: hidden;  /*超出屏幕的部分隐藏*/
                position: relative;
            }

上述代码设置了页面全屏展示,没有内外边距;设置 overflow 属性为 hidden,让超出全屏区域以外的元素不被显示;设置body为相对定位,让两个 article 元素为绝对定位。


            article{
                position: absolute;
                width: 100%;
                height: 100%;
                padding: 100px;
                box-sizing: border-box;
                -webkit-transition: all 1s ease-in-out;
                transition: all 1s ease-in-out;
                top: 0;
            }
            #tablet{
                background: #4ac4aa;
                left: 0;
            }
            #wifi{
                background: #ea5634;
                left: 100%;
            }

对article进行了共同元素的设置:高度、宽度、边距都是全屏显示;设置 transition 动画效果。
之后又单独设置每一个article,设置不同的背景颜色(便于区分);设置第一个article的 left属性为 0,使其默认显示在屏幕中间;设置第二个article的left属性为100%,使其隐藏在屏幕右侧(相当于不显示)。
到此,效果图如下:
在这里插入图片描述


然后,为了页面和动画更加好看,略微增加一些样式:

            h1{
                font-size: 4em;
                border-bottom: 1px solid rgba(255, 255, 255, 0.2); /*设置下边界线*/
                padding-bottom: 30px;   /*设置下边界线的内边距*/
            }
            p{
                color: rgba(255, 255, 255, 0.8); /*设置段落颜色和透明度*/
                margin-bottom: 30px;  /*设置下边的外边距*/
            }
            a{
            	color:#ffffff;
                font-size: 1.5em;
                padding: 5px 50px;
                border: 1px solid #ffffff;   /*设置边框 粗细、样式、颜色*/
                border-radius: 4px;    /*设置边框圆角*/
                text-decoration: none; /*设置文本无下线*/
            }

其中 text-decoration属性设置参考如下:
https://www.w3school.com.cn/cssref/pr_text_text-decoration.asp
在这里插入图片描述

接下来,我们借助jQuery来实现切换动画的功能:
在前面代码的基础上,将下面的代码片段添加到 < body > 标签中。

        <script type="text/javascript" src="jquery-3.4.1.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                $('a').click(function(e){
                    e.preventDefault();
                    $('#tablet').toggleClass('move');
                    $('#wifi').toggleClass('move');
                });
            });
        </script>
代码解释:
  • toggleClass():对设置或移除所选元素的类进行切换。该方法检查每个元素中指定的类。如果不存在则添加类,如果已设置则删除之。这就是所谓的切换效果。。https://www.w3school.com.cn/jquery/attributes_toggleclass.asp ;这里是把 #tablet或#wifi 类切换为 move,鼠标点击 next 后,将执行 move 类里面的内容。而切换后,根据函数用法,再次点击next,又会回到 tablet 页面。

为两个页面中的 a 元素设置了相同过得功能参数。在函数中,首先调用了 click 事件对象的 preventDefault 方法,其目的是阻止超链接的默认锚点跳转动作。接下来,使 tablet 和 wifi 两个页面分别切换名为 move 的类,也就是说当这两个页面没有 move 类时添加这个类,反之去掉这个类(这是为什么再次点击能返回到 tablet 页面的原因)move类的作用将使页面在切换后移动到其所设置的位置

现在,我们设计页面的切换效果是单击 tablet 页面中的 next 按钮时,该页面向左移动到屏幕之外,同时wifi页面从屏幕右侧移动到屏幕中央,完成切换过程。

基于上述动画的描述,我们设置 tablet 的 left 属性为 -100%,将其定位到屏幕以外的位置;而 wifi 的left 属性为0。 创建两个 move类,以便于上面的 js 代码的运行:

            #tablet.move{
                left: -100%;
            }
            #wifi.move{
                left: 0;
            }

现在效果如下图:
在这里插入图片描述


以上基本上已经完成了页面的转换动画设置,但为了更熟练,我们再来试几个其他效果:
1、修改 left 为 top:设置上下滑动页面:
            #tablet{
                background: #4ac4aa;
                top: 0; 
            }
            #wifi{
                background: #ea5634;
                top: 100%;
            }
            #tablet.move{
                top: -100%;
            }
            #wifi.move{
                top: 0;
            }

在这里插入图片描述

2、对页面进行缩放。

使用 transform 中的 scale 方法。方法有两个参数:分别是水平方向和垂直方向的缩放值, 0 代表缩放到最小,1 代表缩放到原始大小。可参见:https://www.w3school.com.cn/css3/css3_2dtransform.asp

            #tablet{
                background: #4ac4aa;
                -webkit-transform:scale(1, 1); 
                transform:scale(1, 1); 
            }
            #wifi{
                background: #ea5634;
                -webkit-transform:scale(0, 0);
                transform:scale(0, 0);
            }
            #tablet.move{
                -webkit-transform:scale(0, 0);
                transform:scale(0, 0);
            }
            #wifi.move{
                -webkit-transform:scale(1, 1); 
                transform:scale(1, 1);
            }

在这里插入图片描述

3、使用3D动画

可以模仿上面代码,来设计一下3D动画。

            #tablet{
                background: #4ac4aa;
                -webkit-transform:rotateY(0deg); 
                transform:rotateY(0deg); 
            }
            #wifi{
                background: #ea5634;
                -webkit-transform:rotateY(180deg);
                transform:rotateY(180deg);
            }
            #tablet.move{
                -webkit-transform:rotateY(-180deg); 
                transform:rotateY(-180deg); 
            }
            #wifi.move{
                -webkit-transform:rotateY(0deg);
                transform:rotateY(0deg);
            }

设置了页面绕Y轴旋转,首次切换时 tablet 从 0 度旋转到 -180度隐藏起来, wifi 则从180度旋转到0度完成显示切换。首次切换朝左转圈,然后又朝右转圈。(这里的正负角度值我理解的是旋转的方向)。
只是这样设计会出现一些问题,看下面的效果图:
在这里插入图片描述
会发现页面只是一张在旋转,而且还是反的。这是因为,当 tablet 页面翻过去后,把其背面的页面给显示出来。而我们要的是wifi 的页面,也就是说,现在要去掉这个“反面”。这里我们设置 backface-visibility 为hidden,即翻面后隐藏。

  • backface-visibility:设置当前页面不面向屏幕时是否可见。对于隐藏旋转后的背面非常有用。https://www.w3school.com.cn/cssref/pr_backface-visibility.asp
            article{
            	-webkit-backface-visibility: hidden;
                backface-visibility: hidden;
            }

这样设置后,页面变为:
在这里插入图片描述
还可以加入 perspective 属性,是旋转效果看起来更加立体:
https://www.w3school.com.cn/cssref/pr_perspective.asp 上面虽说不支持,但是现在浏览器还是可以支持的,对于这个问题,我们先试一试。

            body{
            	-webkit-perspective: 1500px;
                perspective: 1500px;
            }

在这里插入图片描述

4、最后,将3D旋转和缩放结合起来

简单的,就把旋转属性和缩放属性同时设置就行了。这里只需要把之前的整合一下即可。

            #tablet{
                background: #4ac4aa;
                -webkit-transform:rotateY(0deg) scale(1, 1); 
                transform:rotateY(0deg) scale(1, 1); 
            }
            #wifi{
                background: #ea5634;
                -webkit-transform:rotateY(180deg) scale(0, 0);
                transform:rotateY(180deg) scale(0, 0);
            }
            #tablet.move{
                -webkit-transform:rotateY(-180deg) scale(0, 0); 
                transform:rotateY(-180deg) scale(0, 0); 
            }
            #wifi.move{
                -webkit-transform:rotateY(0deg) scale(1, 1);
                transform:rotateY(0deg) scale(1, 1);
            }

在这里插入图片描述

发布了145 篇原创文章 · 获赞 34 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43207025/article/details/100738758