大屏页面.全尺寸自适应.长宽比例不变||动态效果(多次触发)制作全记录

如图,要做到无论页面大小被怎样拖动,里面样式/排版/文字都不乱,比例不变,且随页面等比例放大/缩小

画好框架的页面与设计页面对比

页面代码如下:

 <div id="warp" class="dengbi-16vs9" style="width: 100%;background-color: #012335;"> <!--  -->
            <!--        整体页面 开始       -->
                <!--        上部logo 开始       -->
                <div style=" width: 100%;height: 11%;padding-top: 0.8%;">
                  <!-- 里面的延大logo -->
                  <div style="width: 24%;height: 86%; margin-left: 2%; background:url(YanAnBigSrceen/延大logo.png) no-repeat; background-size:100% 100%;">
                  </div>
                </div>
                <!--        上部logo 结束       -->

               <!--        主要展示区域 开始       -->
                <div style=" width: 100%;height: 89%;padding-top: 1.6%;box-shadow: inset 0 7px 20px -4px #082E43;">
                  <!--        左侧四个方块 开始       -->
                  <div style="width: 72%;height: 97%;float: left;">
                    <!--   第一行 开始  -->
                    <div style="width: 100%;height: 46.4%;padding-left: 1.2% ">
                      <!--   第一行左侧  -->
                      <div style="width: 38.3%;height: 100%;float: left;" class="boxShadow-inset"></div>
                      <!--   第一行右侧  -->
                      <div style="width: 60.5%;height: 100%;float: right;margin-left:1.2%;" class="boxShadow-inset"></div>
                    </div>
                    <!--   第一行 结束  -->

                    <!--   第二行 开始  -->
                    <div style="width: 100%;height: 51.6%;margin-top: 1.6%;padding-left: 1.2%  ">
                      <!--   第二行 左侧  -->
                      <div style="width: 38.3%;height: 100%;float: left; " class="boxShadow-inset"></div>
                      <!--   第二行 右侧  -->
                      <div style="width: 60.5%;height: 100%;float: right;margin-left:1.2%;" class="boxShadow-inset"></div>
                    </div>
                    <!--   第二行 结束  -->


                  </div>
                  <!--        左侧四个方块 结束       -->

                  <!--        右侧长条 开始       -->
                  <div style="width: 27%;height: 97%;float: right;">
                    <!--   左侧列 开始  -->
                    <div style="width: 47%;height: 100%;float: left;margin-right: 3%;" class="LongboxShadow-inset"></div>
                    <!--   左侧列 结束  -->

                    <!--   右侧列 开始  -->
                    <div style="width: 47%;height: 100%;float: right;margin-right: 3%;" class="LongboxShadow-inset"></div>
                    <!--   右侧列 结束  -->
                  </div>
                  <!--        右侧长条 结束       -->
                </div>
                <!--        主要展示区域 结束       -->





            <!--        整体页面 结束       -->

        </div>
     <!-- 额外定义样式 -->
        <style>
        /*大部分框的内阴影*/
       .boxShadow-inset {
          box-shadow: inset -1px 1px 10px 5px #365F7D;
        }

        .LongboxShadow-inset {
          border: 1.5px solid #365F7D;
          box-shadow:inset  0 20px 20px -5px #365F7D,inset  0 -30px 15px -14px #365F7D;
        }

可见,所有长宽设置都是类似于:width: 100%;height: 51.6%;使用的比例%,至于页面本身是如何保证比例不变,且随浏览器大小而变化的,原文见这篇,网友真好
-------------------------------------------------------------------------------------------------------------------------------


注意到页面最左上LOGO的样式设置:
background:url(YanAnBigSrceen/延大logo.png) no-repeat(为了不重复); background-size:100% 100%(将图片拉伸至填满div,或缩放进div);

------------------------------------------------------------------------------------------------------------------------------------

阴影的使用全部是:
box-shadow<length><length><length><length>|| <color>

阴影水平偏移值(可取正负值);阴影垂直偏移值(可取正负值);阴影边框;阴影模糊值;阴影颜色 
例如:box-shadow: inset -1px 1px 10px 5px #365F7D;


在这里,除了使用了inset 内阴影外,还可以叠加使用多个阴影:
例:box-shadow:inset  0 20px 20px -5px #365F7D,inset  0 -30px 15px -14px #365F7D;
这是图片右侧窄长的内阴影,上部阴影和下部阴影是分开加上去的,因为公式可以看到,是不存在一次只设置一侧的,所以这里左右边部分实际是使用了将边框设置的过大而避开的(貌似)

------------------------------------------------------------------------------------------------------------------------------------

新增了文字自适应部分,如图,文字随页面变大/缩小
大图:
这里是小图

小图(看浏览器的书签栏前后对比应该能看得出来页面缩小了吧):
这里是小小图

非常的简单,只要属性设置为

font-size:1.3vw;

就可以了,这里的vw是指: 1% of viewport width(页面宽度)的意思,随你想要的填
更加详细可以看这位热心网友的博客,感谢他!

------------------------------------------------------------------------------------------------------------------------------------

该布局的都布好了,因为页面有些地方使用的Echarts图表控件来展示数据,发现一些样式上和我们想要的功能上的问题,需要调整,如图:


因为篇幅太长,我另开了一个改变一些echarts样式

-------------------------------------------------------------------------------------------------------------------
样式调整完后本来已经写好了,但是我们头想要一个切换文本内容时有动画效果,用来提醒观看者内容变了
 

其实主要使用的是CSS3 的animation(动画) 属性:

细节设置有很多,可以私下自己了解
eg:
 

  • animation-name     指定要绑定到选择器的关键帧的名称
  • animation-duration         动画指定需要多少秒或毫秒完成
  • animation-timing-function    设置动画将如何完成一个周期
  • animation-delay      设置动画在启动前的延迟间隔。
  • animation-iteration-count     定义动画的播放次数。
  • animation-direction        指定是否应该轮流反向播放动画。
  • animation-fill-mode       规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。
  • animation-play-state      指定动画是否正在运行或已暂停。
  • initial        设置属性为其默认值。 阅读关于 initial的介绍。
  • inherit      从父元素继承属性。 阅读关于 initinherital的介绍
  • .......等等

官方给出的JavaScript 语法:   

object.style.animation="mymove 5s infinite"

 

这里的:

mymove   对应属性为上面的animation-name   指定要绑定到选择器的关键帧的名称

5s       对应属性为上面的animation-duration  动画指定需要多少秒或毫秒完成

infinite 对应属性为上面的animation-iteration-count     定义动画的播放次数。 infinite指的是‘无限次’  也可自己设置

 

实际上使用:

样式:

/*从下往上样式*/  /*规定动画是怎么样,也就是动画的样式*/
        @-webkit-keyframes moveFromBottom {
          from { -webkit-transform: translateY(100%); }
        }
        @-moz-keyframes moveFromBottom {
          from { -moz-transform: translateY(100%); }
        }
        @keyframes moveFromBottom {/*moveFromBottom 动画名*/
          from { transform: translateY(100%); }
        }

         /*从下往上 选择器*/  /*规定动画怎么播*/
        .moveFromBottom {/*动画名 动画播放设置; /动画播放设置有若干项控制项/*/
          -webkit-animation: moveFromBottom .6s ease both;
          -moz-animation: moveFromBottom .6s ease both;
          animation: moveFromBottom .6s ease both;

        }

在你需要设置的对象的class里添加我们定义好的动画选择器,但这样写的效果,只有在绘制页面时会出现一次,想要动画的再/多次触发,需要另写方法:

//document.querySelector("#runButton").addEventListener("click", play, false);//监听了单机事件

            //先除去动画的效果,然后让文档重新计算样式,最后将动画再次添加到元素上的效果
            function play(DivID) {
              document.querySelector("#"+DivID).className = "boxShadow-inset";//除去动画效果。只保留原本的boxShadow-inset
              //window.requestAniationFrame(callback)方法告诉浏览器你要执行一个动画,并请求浏览器在重新绘绘制页面之前执行一个函数。
              window.requestAnimationFrame(function(time) {//第一个window.requestAniationFrame告诉浏览器我要执行一个动画,请求浏览器执行该方法的参数所指定的函数。
                window.requestAnimationFrame(function(time) {//告诉浏览器我又要执行一个方法,希望浏览器在重新绘制页面之前执行另一个函数
                  document.querySelector("#"+DivID).className = "boxShadow-inset moveFromBottom";//将动画效果再次添加到元素上
                  //然后浏览器重新绘制了页面
                });
              });

            }

更详细的我找了几个博客,以供学习:

https://blog.csdn.net/csdn_heshangzhou/article/details/80552461   基本原理

https://blog.csdn.net/milijiangjun/article/details/80436131        实例

https://www.jianshu.com/p/48f3b8344174   动画的再次触发与防止多次触发

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章