最近在开发手机端APP页面功能时遇到一个需求:某个页面查询的数据有三种分类,需要展示在同一页面上,用户通过点击分类标签来查看不同类型的数据, 期望效果是

用户点击标签切换时另一个页面能够以一个平滑切入的方式展示数据.

示意图如下:

话不多说了.

首先上CSS

  1. <style type="text/css">
  2. html, body{
  3. height: 100%;
  4. }
  5. body{
  6. overflow:hidden; /*设置超出页面部分隐藏*/
  7. margin: 0;/*初始化页面默认边距*/
  8. padding: 0;
  9. font-family: sans-serif;
  10. }
  11. .page-title-text {
  12. padding-left: 17%;
  13. }
  14. .layui-select-condition {
  15. position:fixed;
  16. padding-top: 16px;
  17. width:100%;
  18. display: none;
  19. z-index:999;
  20. background-color: white;
  21. }
  22. .layui-form-select .layui-input {
  23. padding-right: 30px;
  24. cursor: pointer;
  25. border: 0px;
  26. }
  27. .layui-bottom button{
  28. border: none;
  29. line-height: 50px;
  30. height: 50px;
  31. width: 100%;
  32. }
  33. .line-block-container{
  34. display: inline;
  35. width: 100%;
  36. line-height: 20px;
  37. margin-left: 3%;
  38. padding: 0;
  39. }
  40. .layui-tab-title li a{
  41. display: inline-block;
  42. background: rgb(255 255 255);
  43. color: #5d5d5d;
  44. border: 1px solid #5d5d5d;
  45. width: 26%;
  46. height: 20px;
  47. line-height: 20px;
  48. text-align: center;
  49. font-size: 12px;
  50. position: absolute;
  51. top: 22%;
  52. }
  53. .layui-tab-title li a {
  54. display: inline-block;
  55. }
  56. .zui-col-fitable{
  57. margin-left: 5%;
  58. margin-right: 6%;
  59. padding: 0;
  60. position:relative;
  61. }
  62. .zui-line-separater{
  63. height: 2px;
  64. margin-left: 3%;
  65. }
  66. hr{
  67. margin:3px 0;
  68. }
  69. .zui-col-fitable input{
  70. border:0;
  71. outline:none;
  72. }
  73. #alarmTime:focus{
  74. border:1px solid #66ccff!important;
  75. }
  76. /*给三个子页面的容器添加CSS,设置布局为相对布局的原因是为了实现页面切换效果*/
  77. .zui-slide-container{
  78. position:relative;
  79. margin-top: 50px;
  80. height:100%;
  81. width:100%;
  82. overflow:hidden;
  83. text-align: center;
  84. }
  85. /*给子页面的div设置为绝对定位与父容器的相对定位结合使用实现div布局*/
  86. .zui-slide-container>div{
  87. position: absolute;
  88. width: 100%;
  89. height: 100%;
  90. box-sizing: border-box;
  91. -webkit-transition: all 0.25s ease-in-out; /*为页面设置显示时的切换效果与切换速度,可以在浏览器中调整切换速度来找到自己合适的速度*/
  92. transition: all 0.25s ease-in-out;
  93. top: 0;
  94. }
  95. /*
  96. 设置各个页面的初始位置,后面会有用到
  97. */
  98. #alarmLevel1{
  99. left:-100%
  100. }
  101. #alarmLevel2{
  102. left:-100%
  103. }
  104. #alarmLevel3{
  105. left:-100%
  106. }
  107. /*
  108. 设置当各个子DIV添加move的CSS时,div的位置
  109. */
  110. #alarmLevel1.move{
  111. left: 0;
  112. }
  113. #alarmLevel2.move{
  114. left: 0;
  115. }
  116. #alarmLevel3.move{
  117. left: 0;
  118. }
  119. .div-align-right{
  120. left:100%
  121. }
  122. .div-align-left{
  123. left:-100%
  124. }
  125. #tpl span{
  126. margin: 0;
  127. padding: 0;
  128. float: left;
  129. }
  130. .zui-this{
  131. }
  132. </style>

上页面布局:

  1. <div class="div-main">
  2. <div class="page-title">
  3. <div class="layui-row" style="color:#ffffff">
  4. <div class="layui-col-xs4">
  5. <div class="back-area">
  6. <i class = "layui-icon layui-icon-left" onclick="getBack()"></i>
  7. </div>
  8. </div>
  9. <div class="layui-col-xs4">
  10. <div class="page-title-text">
  11. 预警层级
  12. </div>
  13. </div>
  14. <div class="layui-col-xs4">
  15. </div>
  16. </div>
  17. </div>
  18. <div class="div-main-body">
  19. <div class="layui-tab layui-row layui-tab-brief" lay-filter="dataContainer" style="margin: 0px;">
  20. <ul class="layui-tab-title">
  21. <li style="display:inline;padding:0px;">
  22. <div style="position:relative;height:40px;">
  23. <a href="#alarmLevel1" data-level = "1" data-brother="alarmLevel2,alarmLevel3" style="border-radius:5px 0px 0px 5px;left: 11%;">层级一</a>
  24. <a href="#alarmLevel2" data-level = "2" data-brother="alarmLevel1,alarmLevel3" style="border-radius: unset;left:37%">层级二</a>
  25. <a href="#alarmLevel3" data-level = "3" data-brother="alarmLevel2,alarmLevel1" style="border-radius:0px 5px 5px 0px;left:63%">层级三</a>
  26. </div>
  27. </li>
  28. </ul>
  29. </div>
  30. <div class="zui-slide-container">
  31. <div id="alarmLevel1" style="width:100%;height:100%;position:absolute;">
  32. <table id="alarmLevelGrid1" lay-filter="alarmLevel1" class="layui-hide"></table>
  33. </div>
  34. <div id="alarmLevel2" style="width:100%;height:100%;position:absolute;" >
  35. <table id="alarmLevelGrid2" lay-filter="alarmLevel2" class="layui-hide"></table>
  36. </div>
  37. <div id="alarmLevel3" style="width:100%;height:100%;position:absolute;">
  38. <table id="alarmLevelGrid3" lay-filter="alarmLevel3" class="layui-hide"></table>
  39. </div>
  40. </div>
  41. </div>
  42. </div>

布局没什么好说的,主要就是根据原型图来设置各个div的位置.

javascript代码

  1. <script type="text/javascript">
  2. "use strict"
  3. var table = layui.table;
  4. var $ = layui.jquery;
  5. loadTableData();
  6. function loadTableData(){
  7. var alarmLevel = $("zui-this").attr("data-level");
  8. loadData({"alarmLevel":alarmLevel});
  9. }
  10. function loadData(searchParams){
  11. table.render({
  12. elem: '#alarmLevelGrid1'
  13. ,id:'alarmLevelGrid1'
  14. ,url:'xxxx/xxx/getData'
  15. ,toolbar: false
  16. ,title: '预警层级记录表'
  17. ,totalRow: false
  18. ,limits:[3,5,10,20]
  19. ,limit:5
  20. ,cols: [[
  21. {
  22. field:'alarmLevel', // 只需要在此处选择一个必定存在的元素作为渲染条件即可
  23. title:'预警层级',
  24. width:400,
  25. templet:'#alarmLevelTpl'
  26. }
  27. ]]
  28. ,page: true
  29. ,where :{"alarmLevel":"1"}
  30. ,response: {
  31. statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
  32. }
  33. ,parseData: function(res){
  34. return {
  35. "code": res.code==0?200:404, //解析接口状态
  36. "msg": res.msg, //解析提示文本
  37. "count": res.total, //解析数据长度
  38. "data": res.level //解析数据列表
  39. };
  40. }
  41. ,done: function (res, curr, count){
  42. // done函数的妙用,利用表格数据完成后,调整对应的css可以将layui的pc端表格设置成兼容手机端模式
  43. $("div[lay-id=alarmLevelGrid1]").css("margin-top", "11%");
  44. layui.$('.layui-table-view .layui-table').css("width","100%");
  45. layui.$('table tbody tr td div').attr("class","");
  46. layui.$('table tbody tr td').css("display","inline-flex");
  47. layui.$('table tbody tr td').css("border-width","1px");
  48. layui.$('table tbody tr td').css("border-color","#66CCFF");
  49. layui.$('table tbody tr td').css("border-radius","1rem");
  50. layui.$('table tbody tr td').css("border-style","solid");
  51. layui.$('table tbody tr td').css("margin-left","3%");
  52. layui.$('table tbody tr td').css("width","94%");
  53. layui.$('table tbody tr td').css("padding-left","12px");
  54. layui.$('table tbody tr td').removeAttr("data-content");
  55. layui.$('table tbody tr td').removeAttr("data-edit");
  56. // 隐藏手机端不需要的部分
  57. layui.$('.layui-table-header').css("display","none");
  58. layui.$('.layui-table-tool').css("display","none");
  59. layui.$('.layui-table-total').css("display","none");
  60. // 处理分页条内容
  61. layui.$('.layui-table-page').css("width","100%");
  62. $('.layui-laypage-skip').remove();
  63. layui.$('table').css("border-collapse","separate");
  64. layui.$('table').css("border-spacing","0px 10px");
  65. }
  66. });
  67. table.render({
  68. elem: '#alarmLevelGrid2'
  69. ,id:'alarmLevelGrid2'
  70. ,url:'xxxx/assf/xx/getData'
  71. ,toolbar: false
  72. ,title: '预警层级记录表'
  73. ,totalRow: false
  74. ,limits:[3,5,10,20]
  75. ,limit:5
  76. ,cols: [[
  77. {
  78. field:'alarmLevel', // 只需要在此处选择一个必定存在的元素作为渲染条件即可
  79. title:'预警层级',
  80. width:400,
  81. event: 'viewDetail',
  82. templet:'#alarmLevelTpl'
  83. }
  84. ]]
  85. ,page: true
  86. ,where :{"alarmLevel":"2"}
  87. ,response: {
  88. statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
  89. }
  90. ,parseData: function(res){
  91. return {
  92. "code": res.code==0?200:404, //解析接口状态
  93. "msg": res.msg, //解析提示文本
  94. "count": res.total, //解析数据长度
  95. "data": res.level //解析数据列表
  96. };
  97. }
  98. ,done: function (res, curr, count){
  99. $("div[lay-id=alarmLevelGrid2]").css("margin-top", "11%");
  100. layui.$('.layui-table-view .layui-table').css("width","100%");
  101. layui.$('table tbody tr td div').attr("class","");
  102. layui.$('table tbody tr td').css("display","inline-flex");
  103. layui.$('table tbody tr td').css("border-width","1px");
  104. layui.$('table tbody tr td').css("border-color","#66CCFF");
  105. layui.$('table tbody tr td').css("border-radius","1rem");
  106. layui.$('table tbody tr td').css("border-style","solid");
  107. layui.$('table tbody tr td').css("margin-left","3%");
  108. layui.$('table tbody tr td').css("width","94%");
  109. layui.$('table tbody tr td').css("padding-left","12px");
  110. layui.$('table tbody tr td').removeAttr("data-content");
  111. layui.$('table tbody tr td').removeAttr("data-edit");
  112. // 隐藏手机端不需要的部分
  113. layui.$('.layui-table-header').css("display","none");
  114. layui.$('.layui-table-tool').css("display","none");
  115. layui.$('.layui-table-total').css("display","none");
  116. // 处理分页条内容
  117. layui.$('.layui-table-page').css("width","100%");
  118. $('.layui-laypage-skip').remove();
  119. layui.$('table').css("border-collapse","separate");
  120. layui.$('table').css("border-spacing","0px 10px");
  121. }
  122. });
  123. table.render({
  124. elem: '#alarmLevelGrid3'
  125. ,id:'alarmLevelGrid3'
  126. ,url:'xxxx/sxxx/getData'
  127. ,toolbar: false
  128. ,title: '预警层级记录表'
  129. ,totalRow: false
  130. ,limits:[3,5,10,20]
  131. ,limit:5
  132. ,cols: [[
  133. {
  134. field:'alarmLevel', // 只需要在此处选择一个必定存在的元素作为渲染条件即可
  135. title:'预警层级',
  136. width:400,
  137. event: 'viewDetail',
  138. templet:'#alarmLevelTpl'
  139. }
  140. ]]
  141. ,page: true
  142. ,where :{"alarmLevel":"3"}
  143. ,response: {
  144. statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
  145. }
  146. ,parseData: function(res){
  147. return {
  148. "code": res.code==0?200:404, //解析接口状态
  149. "msg": res.msg, //解析提示文本
  150. "count": res.total, //解析数据长度
  151. "data": res.level //解析数据列表
  152. };
  153. }
  154. ,done: function (res, curr, count){
  155. $("div[lay-id=alarmLevelGrid3]").css("margin-top", "11%");
  156. layui.$('.layui-table-view .layui-table').css("width","100%");
  157. layui.$('table tbody tr td div').attr("class","");
  158. layui.$('table tbody tr td').css("display","inline-flex");
  159. layui.$('table tbody tr td').css("border-width","1px");
  160. layui.$('table tbody tr td').css("border-color","#66CCFF");
  161. layui.$('table tbody tr td').css("border-radius","1rem");
  162. layui.$('table tbody tr td').css("border-style","solid");
  163. layui.$('table tbody tr td').css("margin-left","3%");
  164. layui.$('table tbody tr td').css("width","94%");
  165. layui.$('table tbody tr td').css("padding-left","12px");
  166. layui.$('table tbody tr td').removeAttr("data-content");
  167. layui.$('table tbody tr td').removeAttr("data-edit");
  168. // 隐藏手机端不需要的部分
  169. layui.$('.layui-table-header').css("display","none");
  170. layui.$('.layui-table-tool').css("display","none");
  171. layui.$('.layui-table-total').css("display","none");
  172. // 处理分页条内容
  173. layui.$('.layui-table-page').css("width","100%");
  174. $('.layui-laypage-skip').remove();
  175. layui.$('table').css("border-collapse","separate");
  176. layui.$('table').css("border-spacing","0px 10px");
  177. }
  178. });
  179. }
  180. function selectDefault(){
  181. $("a[data-level = 1]").click();
  182. }
  183. // 为导航栏目添加绑定事件
  184. /*
  185. 该段js代码的核心就是当点击类型标签时,为对应的div 添加move 样式(上述css中有写),
  186. 同时移除其他两个div的move样式,这样就可以实现页面滑动切换的效果啦.这样的动态效果还有很
  187. 多例如:旋转,栅格等等,感兴趣的读者朋友可以自行试验
  188. */
  189. $('a[data-level=1]').click(function(e){
  190. if($(this).hasClass("zui-this"))
  191. return;
  192. reloadTable("alarmLevelGrid1",{"alarmLevel":"1"});
  193. resetSelectedStyle();
  194. $(".zui-this").removeClass("zui-this");
  195. $(this).addClass("zui-this");
  196. renderSelectedStyle(this);
  197. e.preventDefault();
  198. $('#alarmLevel2').removeClass("move");
  199. $('#alarmLevel1').removeClass("div-align-left");
  200. $('#alarmLevel2').removeClass("div-align-right");
  201. $('#alarmLevel3').removeClass("div-align-right");
  202. $('#alarmLevel3').removeClass("move");
  203. $('#alarmLevel1').toggleClass('move');
  204. });
  205. $('a[data-level=2]').click(function(e){
  206. if($(this).hasClass("zui-this"))
  207. return;
  208. reloadTable("alarmLevelGrid2",{"alarmLevel":"2"});
  209. resetSelectedStyle();
  210. $(".zui-this").removeClass("zui-this");
  211. $(this).addClass("zui-this");
  212. renderSelectedStyle(this);
  213. e.preventDefault();
  214. $('#alarmLevel2').toggleClass('move');
  215. $('#alarmLevel2').removeClass("div-align-right");
  216. $('#alarmLevel2').removeClass("div-align-left");
  217. $('#alarmLevel1').removeClass("move");
  218. $('#alarmLevel3').removeClass("move");
  219. });
  220. $('a[data-level=3]').click(function(e){
  221. if($(this).hasClass("zui-this"))
  222. return;
  223. reloadTable("alarmLevelGrid3",{"alarmLevel":"3"});
  224. resetSelectedStyle();
  225. $(".zui-this").removeClass("zui-this");
  226. $(this).addClass("zui-this");
  227. renderSelectedStyle(this);
  228. e.preventDefault();
  229. $('#alarmLevel1').removeClass("move");
  230. $('#alarmLevel2').removeClass("move");
  231. $('#alarmLevel1').toggleClass("div-align-right");
  232. $('#alarmLevel2').toggleClass("div-align-right");
  233. $('#alarmLevel1').removeClass("div-align-left");
  234. $('#alarmLevel3').toggleClass('move');
  235. });
  236. // 由于css的就近原则,使用class 无法达到预期效果,使用jquery增加样式
  237. function resetSelectedStyle(){
  238. $(".zui-this").css("color","#333");
  239. $(".zui-this").css("background-color","white");
  240. }
  241. function renderSelectedStyle(elem){
  242. $(elem).css("color","white");
  243. $(elem).css("background-color","#1e9fff");
  244. }
  245. // 表格重载
  246. function reloadTable(gridLayId,params){
  247. let baseParam = {"isMobile":true};
  248. $.extend(true,baseParam,params);
  249. table.reload(gridLayId,{
  250. page: {
  251. curr: 1
  252. },
  253. where : baseParam
  254. });
  255. }
  256. // 返回
  257. function getBack(){
  258. clearContext();
  259. history.back(-1);
  260. }
  261. // 清理空间
  262. function clearContext(){
  263. c.remove("searchParams");
  264. }
  265. function getUserName(d){
  266. if(d.writeUser){
  267. return d.writeUser.empName;
  268. }
  269. return "";
  270. }
  271. $(document).ready(function(){
  272. selectDefault();
  273. });
  274. </script>

CSS实现页面切换时的滑动效果的更多相关文章

  1. css 实现页面加载中等待效果

    <!DOCTYPE html> <html> <head> <title>css实现页面加载中,请稍候效果</title> <meta ...

  2. WOW.js和animate.css让页面滚动时显示动画

    官网:http://mynameismatthieu.com/WOW/ bootstrap CDN服务:http://www.bootcdn.cn/wow/ 1.wow.js 实现了在网页滚动时的动画 ...

  3. Android中实现整个视图切换的左右滑动效果

    Android中提供了一个Gallary,可以实现图片或者文本的左右滑动效果. 如何让整个视图都能实现左右滑动,达到类似于Gallary的效果呢?可以直接用一个开源的ViewFlow来实现.   项目 ...

  4. viewpager欢迎页面底部点的滑动效果

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo ...

  5. vue 页面切换从右侧切入效果

    1.将切换的页面用transition包裹 <div class="index-content"> <transition> <router-view ...

  6. CSS实现鼠标移入时图片的放大效果以及缓慢过渡

    transform:scale()可以实现按比例放大或者缩小功能. transition可以设置动画执行的时间,实现缓慢或者快速的执行动画,效果图如下: 源码: <!DOCTYPE html&g ...

  7. ViewPager之Fragment页面切换

    一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...

  8. AngularJS应用页面切换优化方案

    葡萄城的一款尚在研发中的产品,对外名称暂定为X项目.其中使用了已经上市的Wijmo中SpreadJS产品,另外,在研发过程中整理了一些研发总结分享给大家.如本篇的在页面切换的过程中优化方案,欢迎大家跟 ...

  9. AngularJs应用页面切换优化方案(转)

    目录[-] 前言 场景 使用resolve来提前请求数据 为页面加入切换动画 总结 葡萄城的一款尚在研发中的产品,对外名称暂定为X项目.其中使用了已经上市的wijmo中SpreadJS产品,另外,在研 ...

随机推荐

  1. Testing Beta Round (Unrated)

    比赛链接:https://codeforces.com/contest/1390 A. 123-sequence 题意 给出一个只含有 $1,2,3$ 的数组,问使所有元素相同至少要替换多少元素. 题 ...

  2. BZOJ3998 弦论 【SAM】k小子串

    BZOJ3998 弦论 给一个字符串,问其第\(K\)小字串是什么 两种形式 1.不同起始位置的相同串只算一次 2.不同起始位置的相同串各算一次 首先建\(SAM\) 所有串的数量就是\(SAM\)中 ...

  3. 2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)(9/11)

    $$2017-2018\ ACM-ICPC\ German\ Collegiate\ Programming\ Contest (GCPC 2017)$$ \(A.Drawing\ Borders\) ...

  4. 【bzoj 3333】排队计划(线段树)

    n个数,求一次逆序对.接着有m次修改操作,把每次输入的位置p的数之后<=它的数取出来,从小到大排序后再放回空位里,求逆序对.(N,M<=500,000 , Ai<=10^9)思路:1 ...

  5. java——字符串常量池、字符串函数以及static关键字的使用、数组的一些操作函数、math函数

    字符串常量池: 字符串比较函数:  字符串常用方法:  字符串截取函数: 字符串截取函数:  static关键字使用: 要调用类中的static类型的变量的时候,可以用"类名.变量名&quo ...

  6. 迷宫城堡 HDU - 1269 判断有向图是否是强连通图

    为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以 ...

  7. Codeforces Round #643 (Div. 2) C. Count Triangles (数学公式)

    题意:给你四个正整数\(A,B,C,D\),且\(A\le B\le C \le D\),有\(A\le x\le B\le y\le C \le z\le D\),求最多有多少组\((x,y,z)\ ...

  8. XHXJ's LIS HDU - 4352 最长递增序列&数位dp

    代码+题解: 1 //题意: 2 //输出在区间[li,ri]中有多少个数是满足这个要求的:这个数的最长递增序列长度等于k 3 //注意是最长序列,可不是子串.子序列是不用紧挨着的 4 // 5 // ...

  9. 转载-cookie和session的窃取

    一.cookie的基本特性 如果不了解cookie,可以先到 wikipedia 上学习一下. http request 浏览器向服务器发起的每个请求都会带上cookie: GET /index.ht ...

  10. STM32 单片机的USART的奇偶校验 误区(坑)

    当STM32的串口配置成带有奇偶校验位的情况下,需要软件校验是否发生奇偶校验错误,硬件只是置起奇偶校验错误标志位,并将错误的数据放到DR寄存器中,同时置起RXEN标志位,如果使能中断还是会正常进入中断 ...