前端技术实现聊天列表模版-带动画

下面是效果图

 

下面是实现代码

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" href="frozen.css">
	<meta charset="utf-8">
	<meta name = "viewport" content = "width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable = 0" />
	<script type="text/javascript" src="vue.min.js"></script>
  <style type="text/css">
    
    /*从右往左切换动画*/
    .rtol{
      animation:rtolani 0.5s;
      -webkit-animation:rtolani 0.5s; /* Safari and Chrome */
    }
    @keyframes rtolani
    {
      0%   {left:-100%; top:10%;}
      100% {left:0; top:10%;}
    }
    @-webkit-keyframes rtolani /* Safari and Chrome */
    {
      0%   {left:100%; top:10%;}
      100% {left:0; top:10%;}
    }

    /*从右往左切换动画 321返回时无效加的这个*/
    .rrtol{
      animation:rrtolani 0.5s;
      -webkit-animation:rrtolani 0.5s; /* Safari and Chrome */
    }
    @keyframes rrtolani
    {
      0%   {left:-100%; top:10%;}
      100% {left:0; top:10%;}
    }
    @-webkit-keyframes rrtolani /* Safari and Chrome */
    {
      0%   {left:100%; top:10%;}
      100% {left:0; top:10%;}
    }
    

    /*从左往右切换动画*/
    .ltor{
      animation:ltorani 0.5s;
      -webkit-animation:ltorani 0.5s; /* Safari and Chrome */
    }
    @keyframes ltorani
    {
      0%   {left:100%; top:10%;}
      100% {left:0; top:10%;}
    }

    @-webkit-keyframes ltorani /* Safari and Chrome */
    {
      0%   {left:100%; top:10%;}
      100% {left:0; top:10%;}
    }

    /*控制点击产生阴影*/
    .shadow:active{
      background-color: #eeeeee !important;
      border-radius: 5px;


    }

    /*控制点击产生阴影*/
    .shadow{
      background-color: #ffffff !important;

    }





  </style>
</head>
<body>
<div id="app">
	
	<!-- 顶部tabbar -->
	<div class="ui-tab">
    	<ul class="ui-tab-nav ui-border-b" style="position:fixed;z-index: 1000;height: 10%;">
        	<li :class="msglist" @click="msgbtnde"><span>消息列表</span></li><!-- current -->
        	<li :class="myfri" @click="myfribtnde"><span>我的朋友</span></li>
        	<li :class="mymore" @click="mymorbtnde"><span>我的扩展</span></li>
    	</ul>
    	<!-- 占位 -->
    	
	</div>


	  <!-- 消息列表页 -->
    <div v-if="msglist=='current'" style="position:absolute;top:10%;width: 100%" :class="anistyle">
    		<!-- 搜索条 -->
    		<div  class="ui-searchbar-wrap ui-border-b" @click="goToSearch('searchfriend')">
    			<div class="ui-searchbar ui-border-radius">
        			<i class="ui-icon-search"></i>
        			<div class="ui-searchbar-text">在这里搜索朋友</div>
        			<div class="ui-searchbar-input">
        				<input value="" type="tel" placeholder="在这里搜索朋友" autocapitalize="off">
        			</div>
        			<i class="ui-icon-close"></i>
    			</div>
    			<button class="ui-searchbar-cancel">取消</button>
			</div>
			
			<!-- 条目容器 -->
			<ul class="ui-list ui-list-function ui-border-tb">
     			
     			
        	<!-- 消息列表项 -->
     			<li class="shadow" v-for="item in items" @click="goToChat(item)">
        			<!-- 条目头像用户名内容 -->
        			<div class="ui-avatar">
            			<span :style="item.imgsrc"></span>
        			</div>
        			<div class="ui-list-info ui-border-t">
            			<h4 class="ui-nowrap">{{item.username}}</h4>
            			<p>{{item.content}}</p>
        			</div>
        			<!-- 条目右侧时间 -->
    				<div class="ui-btn disabled shadow">{{item.time}}</div>
    				<!-- 条目右侧未读个数 -->
    				<div v-if="item.mesnum>0" style="background-color: #ff0000;
    				width:16px;
    				height:16px;
    				border-radius: 50%;
    				text-align: center;
    				line-height: 16px;
    				font-size: 12px;
    				color: #fff;
    				position: absolute;
    				top: 0;
    				left: 0;
    				">{{item.mesnum}}</div>
    			</li>
			</ul>    		

    </div>


    <!-- 我的朋友页 -->
    <div v-if="myfri=='current'" style="position:absolute;top:10%;width: 100%" :class="anistyle">    	
  		<!-- 搜索条 -->
      <div  class="ui-searchbar-wrap ui-border-b" @click="goToSearch('searchfriend')">
      		<div class="ui-searchbar ui-border-radius">
          		<i class="ui-icon-search"></i>
          		<div class="ui-searchbar-text">在这里搜索朋友</div>
          		<div class="ui-searchbar-input">
          			<input value="" type="tel" placeholder="在这里搜索朋友" autocapitalize="off">
          		</div>
          		<i class="ui-icon-close"></i>
      		</div>
      		<button class="ui-searchbar-cancel">取消</button>
  		</div>
  		<!--两图区域 -->
      <div class="ui-feeds">
        <ul>
          <li>
            <span :style="TopImg[0].src" @click="topImgClicked(TopImg[0].link)"></span>
          </li>
          <li>
            <span :style="TopImg[1].src" @click="topImgClicked(TopImg[1].link)"></span>
          </li>
        </ul>
      </div>
      <!-- 列表选项卡 -->
      <div class="ui-tab ">
        <ul class="ui-tab-nav ui-border-b ">
          <li style="text-align: left;" :class="myfri_fri" @click="myfriFri"><span>朋友列表</span></li>
          <li style="text-align: right;" :class="myfri_gro" @click="myfriGro"><span>群聊列表</span></li>
        </ul>
      </div>
      <!-- 下部列表 -->
      
      <div v-if="myfri_fri=='current'"><!-- 朋友列表容器 -->
        <ul class="ui-list ui-list-single ui-list-link ui-border-tb">
          
          <li class="ui-border-t" v-for="friitem in frilists" @click="goToChat(friitem)">
            <!-- 字母序号区域if条件渲染 -->
            <div class="ui-list-info" v-if="friitem.flag=='order'">
              <h4 class="ui-nowrap" style="margin-left: 3%;color: #666666;">{{friitem.username}}</h4>
              <div class="ui-txt-info"></div>
            </div>
          
            <!-- 朋友项区域if条件渲染 -->
            <div class="ui-avatar-s" v-if="friitem.flag=='user' && trygroupflag(friitem.groupflag)">
              <span :style="friitem.imgsrc"></span>
            </div>
            <div class="ui-list-info ui-border-t shadow" v-if="friitem.flag=='user' && trygroupflag(friitem.groupflag)">
              <h4 class="ui-nowrap">{{friitem.username}}</h4>
            </div>
          </li>
          
        </ul>
      </div>
      <div v-if="myfri_gro=='current'"><!-- 群聊列表容器 -->
        <ul class="ui-list ui-list-single ui-list-link ui-border-tb">
          
          <li class="ui-border-t" v-for="groitem in grolists" @click="goToChat(groitem)">
            <!-- 字母序号区域if条件渲染 -->
            <!-- <div class="ui-list-info" v-if="groitem.flag=='order'">
              <h4 class="ui-nowrap" style="margin-left: 3%;color: #666666;">{{groitem.username}}</h4>
              <div class="ui-txt-info"></div>
            </div> -->
          
            <!-- 群项区域if条件渲染 -->
            <div class="ui-avatar-s" v-if="groitem.flag=='group'">
              <span :style="groitem.imgsrc"></span>
            </div>
            <div class="ui-list-info ui-border-t shadow" v-if="groitem.flag=='group'">
              <h4 class="ui-nowrap">{{groitem.username}}</h4>
            </div>
          </li>
          
        </ul>
      </div>


    </div>




  	<!-- 我的扩展页 -->
    <div v-if="mymore=='current'" style="position:absolute;top:10%;width: 100%" :class="anistyle">    	
  		<div  class="ui-searchbar-wrap ui-border-b" @click="goToSearch('searchresource')">
      		<div class="ui-searchbar ui-border-radius">
          		<i class="ui-icon-search"></i>
          		<div class="ui-searchbar-text">在这里搜索资源</div>
          		<div class="ui-searchbar-input">
          			<input value="" type="tel" placeholder="在这里搜索朋友" autocapitalize="off">
          		</div>
          		<i class="ui-icon-close"></i>
      		</div>
      		<button class="ui-searchbar-cancel">取消</button>
  		</div>
  		敬请期待...
	 </div>


</div>
</body>
</html>
<script>
	new Vue({
  	el: '#app',
  	data: {
      groupflag:'0',
      myfri_fri:'current',//是否选中消息列表我的朋友中的朋友列表
      myfri_gro:'',//是否选中消息列表我的朋友中的群聊列表
      anistyle:'',//切换动画样式类
      msglist:'current',//是否选中消息列表
		  myfri:'',//是否选中消息列表我的朋友
		  mymore:'',//是否选中消息列表我的扩展
      msglistTop:0,//消息列表滚动值(距页面顶端高度)
      myfriTop:0,//我的朋友滚动值(距页面顶端高度)
      mymoreTop:0,//我的扩展滚动值(距页面顶端高度)
  		TopImg:[
        {
        src:"border-radius: 5%;background-image:url(https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1555324144&di=430a23b81be40e36546a7a13f62d87a2&imgtype=jpg&er=1&src=http%3A%2F%2Fuploads.5068.com%2Fallimg%2F1802%2F78-1P209141R8.jpg)",
        link:"http://www.fanze.online",
        },
        {
        src:"border-radius: 5%;background-image:url(https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1555324144&di=430a23b81be40e36546a7a13f62d87a2&imgtype=jpg&er=1&src=http%3A%2F%2Fuploads.5068.com%2Fallimg%2F1802%2F78-1P209141R8.jpg)",
        link:"http://fanze.online",
        }
      ],

      //朋友列表
      frilists:[
        {
        username: '分组1',
        imgsrc:"",
        uid:'',
        flag:'order',
        groupflag:'1'
        },
        {
        username: '开发者',
        imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
        uid:'00001',
        flag:'user',
        groupflag:'1'
        },
        {
        username: '小张',
        imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
        uid:'00002',
        flag:'user',
        groupflag:'1'
        },
        {
        username: '咪咪',
        imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
        uid:'00003',
        flag:'user',
        groupflag:'1'
        },
        {
        username: '王老三',
        imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
        uid:'00001',
        flag:'user',
        groupflag:'1'
        },
        {
        username: '分组2',
        imgsrc:"",
        uid:'',
        flag:'order',
        groupflag:'2'
        },
        {
        username: '张',
        imgsrc:"background-image:url(http://img2.imgtn.bdimg.com/it/u=2060761043,284284863&fm=26&gp=0.jpg)",
        uid:'00001',
        flag:'user',
        groupflag:'2'
        },
        {
        username: '赵',
        imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
        uid:'00001',
        flag:'user',
        groupflag:'2'
        }
      ],
      //群聊列表
      grolists:[
        {
        username: 'XX即时通讯官方群',
        imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
        uid:'00002',
        flag:'group'
        }
      ],


      //消息列表
      items:[
  			{
  			username: '开发者',
  			content:'晚上哪里吃?',
  			imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
  			uid:'00001',
  			time:'晚上20:07',
  			mesnum:0
  			},
  			{
  			username: '小美',
  			content:'你的衣服好漂亮啊!',
  			imgsrc:"background-image:url(http://img2.imgtn.bdimg.com/it/u=2060761043,284284863&fm=26&gp=0.jpg)",
  			uid:'00002',
  			time:'晚上21:40',
  			mesnum:5
  			},
  			{
  			username: '年华',
  			content:'移动端怎么样了?',
  			imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180419/20180419051254_75804.jpg)",
  			uid:'00003',
  			time:'晚上20:30',
  			mesnum:0
  			},
  			{
  			username: '哥哥',
  			content:'在',
  			imgsrc:"background-image:url(http://placeholder.qiniudn.com/100x100)",
  			uid:'00004',
  			time:'晚上21:47',
  			mesnum:10
  			},
  			{
  			username: '开发者',
  			content:'晚上哪里吃?',
  			imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
  			uid:'00001',
  			time:'晚上21:47',
  			mesnum:0
  			},
  			{
  			username: '小美',
  			content:'你的衣服好漂亮啊!',
  			imgsrc:"background-image:url(http://img2.imgtn.bdimg.com/it/u=2060761043,284284863&fm=26&gp=0.jpg)",
  			uid:'00002',
  			time:'晚上21:47',
  			mesnum:0
  			},
  			{
  			username: '年华',
  			content:'移动端怎么样了?',
  			imgsrc:"background-image:url(http://placeholder.qiniudn.com/100x100)",
  			uid:'00003',
  			time:'晚上21:47',
  			mesnum:0
  			},
  			{
  			username: '哥哥',
  			content:'在',
  			imgsrc:"background-image:url(http://placeholder.qiniudn.com/100x100)",
  			uid:'00004',
  			time:'晚上21:47',
  			mesnum:0
  			},
  			{
  			username: '开发者',
  			content:'晚上哪里吃?',
  			imgsrc:"background-image:url(http://img.52z.com/upload/news/image/20180213/20180213062640_77463.jpg)",
  			uid:'00001',
  			time:'晚上21:47',
  			mesnum:0
  			},
  			{
  			username: '小美',
  			content:'你的衣服好漂亮啊!',
  			imgsrc:"background-image:url(http://img2.imgtn.bdimg.com/it/u=2060761043,284284863&fm=26&gp=0.jpg)",
  			uid:'00002',
  			time:'晚上21:47',
  			mesnum:0
  			},
  			{
  			username: '年华',
  			content:'移动端怎么样了?',
  			imgsrc:"background-image:url(http://placeholder.qiniudn.com/100x100)",
  			uid:'00003',
  			time:'晚上21:47',
  			mesnum:1
  			},
  			{
  			username: '哥哥',
  			content:'在',
  			imgsrc:"background-image:url(http://placeholder.qiniudn.com/100x100)",
  			uid:'00004',
  			time:'晚上21:47',
  			mesnum:0
  			}
  		] 
  	},
  	methods: {
     	trygroupflag:function(groupflag){

     		if(this.groupflag.search(groupflag)!=-1)
     			return true;
     		else
     			return false;
     	},

     	//tabbar消息列表被点击
     	msgbtnde: function() {
        if(!(this.msglist=='current'))
          this.anistyle='rrtol';
        this.msglist='current';
			  this.myfri='null';
			  this.mymore='null';
        document.documentElement.scrollTop=0;
        document.body.scrollTop=0;
     	},
     	//tabbar我的朋友被点击
     	myfribtnde: function() {
        //判断切换前页
        if(this.msglist=='current')
          this.anistyle='ltor';
        if(this.mymore=='current')
          this.anistyle='rtol';
        
        this.msglist='null';
			  this.myfri='current';
			  this.mymore='null';
        document.documentElement.scrollTop=0;
        document.body.scrollTop=0;
     	},
     	//tabbar我的扩展被点击
     	mymorbtnde: function() {
        this.msglist='null';
			  this.myfri='null';
			  this.mymore='current';
        this.anistyle='ltor';
        document.documentElement.scrollTop=0;
        document.body.scrollTop=0;
     	},
      //我的朋友页中的朋友列表被点击
      myfriFri:function() {
        this.myfri_fri='current';
        this.myfri_gro='';
      },
      //我的朋友页中的群聊列表被点击
      myfriGro:function() {
        this.myfri_fri='';
        this.myfri_gro='current';
      },
      下面是指向安卓的方法
      //消息列表朋友列表(朋友&群聊)条目被点击跳转到聊天窗口--传入后由java解析
      goToChat:function(item) {
        
      	//处理分组展开逻辑
        if(item.flag=='order')
        {
        	if(this.groupflag.search(item.groupflag)!=-1)
        	{
        		this.groupflag=this.groupflag.replace(item.groupflag,'');
        	}       		
        	else if(this.groupflag.search(item.groupflag)==-1)
        	{
        		this.groupflag += item.groupflag;
        	}
        }else         
        	android.gochat(JSON.stringify(item));
      },
      //搜索框被点击
      goToSearch:function(searchfalg) {
        android.gosearch(searchfalg);
      },
      //我的朋友页顶部图片被点击
      topImgClicked:function(link) {
        console.log(link);
        android.gosearch(link);
      },
  	}
})

</script>

 声明:转载请注明出处,本人入门级菜鸟,内容大多学习于网络,存在问题太多不一一列举,大佬多多指教.本人QQ941131649

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值