h5搜索页模板

h5搜索页模板

预览

带搜索历史功能


完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
	<title>搜索</title>
	<link rel="stylesheet" type="text/css" href="../../css/aui.min.css"/>
	<style type="text/css">
		body{background: #FFF;}
		.aui-header-title{display: flex; align-items: center; right: 60px;}
		.aui-header-right{width: 60px;}
		.aui-header-right-text{font-size: 16px; color: #FFF;}
		.aui-header-search{width: 100%; height: 34px; overflow: hidden; border-radius: 30px; background: #FFF; display: flex; align-items: center;}
		.aui-header-search .iconsearch{width: 30px; height: 100%; line-height: 34px; font-size: 16px; color: #aaa; position: relative; left: 2px;}
		.aui-header-search #search-form{width: -webkit-calc(100% - 30px - 10px); width: calc(100% - 30px - 10px); height: 100%;}
		.aui-header-search #search{width: 100%; height: 100%; display: flex; align-items: center; font-size: 15px; color: #333; border: none;}
		.aui-header-search #search::-webkit-input-placeholder{color: #aaa;}
		.aui-header-search #search::-webkit-textfield-decoration-container{position: relative; top: -1px;}
		.aui-header-search #search[type="search" i]::-webkit-search-cancel-button{-webkit-appearance: none; position: relative; top: 1px; height: 20px; width: 20px; border-radius: 50%; background :#EBEBEB url("../../img/clear.png") no-repeat center; background-size: 14px 14px; }
		.search-history{width: 100%; padding: 15px; box-sizing: border-box;}
		.search-history-title{width: 100%; line-height: 50px; font-size: 18px; color: #333; font-weight: 600;}
		.search-history-clear{width: 40px; line-height: 50px; text-align: right; font-size: 14px; color: #aaa; display: inline-block; float: right;}
		.search-history-lists{width: 100%;}
		.search-history-list{height: 30px; line-height: 30px; padding: 0 15px; box-sizing: border-box; font-size: 14px; color: #646464; background: #EFEFEF; display: inline-block; vertical-align: top; margin: 0 15px 15px 0; border-radius: 30px;}
		.search-data{width: 100%; min-height: 100%; background: #F2F2F2;}
	</style>
</head>
<body>
	<div class="aui-container" id="app">
		<header class="aui-header">
			<a class="aui-header-left" @click.stop="aui.closeWin()"><i class="iconfont iconreturn"></i></a>
			<div class="aui-header-title">
				<div class="aui-header-search">
					<i class="iconfont iconsearch"></i>
					<form target="frameFile" id="search-form" @submit="search">
						<input type="search" ref="search" name="search" id="search" v-model="keywords" placeholder="大家都在搜:2019退役球星" value="" />
					</form>
				</div>
			</div>
			<div class="aui-header-right" v-cloak v-if="keywords" @click.stop="search"><span class="aui-header-right-text">搜索</span></div>
		</header>
		<div class="aui-content">
			<!-- 搜索历史 -->
			<div class="search-history" v-cloak v-if="historyData.length>0 && searchData.length==0">
				<div class="search-history-title">搜索历史 <div class="search-history-clear" @click.stop="clearHistory"><i class="iconfont icondelete"></i></div></div>
				<div class="search-history-lists">
					<div class="search-history-list" 
						v-for="item in historyData" 
						:data-keywords="item.keywords" 
						@click.stop="tapHistorySearch($event)"
					>{{item.keywords}}</div>
				</div>
			</div>
			<!-- 搜索结果 -->
			<div class="search-data" v-cloak v-if="searchData.length>0">
				<div class="aui-list" v-for="item in searchData" @click.stop="aui.openWin(item.url)">
					<div class="aui-list-left">{{item.name}}</div>
					<div class="aui-list-right"><i class="iconfont aui-btn-right iconright1"></i></div>
				</div>
			</div>
		</div>
	</div>
	<script src="../../lib/vue.min.js" type="text/javascript" charset="utf-8"></script>
	<script src="../../lib/jquery/jquery-2.1.3.min.js" type="text/javascript" charset="utf-8"></script>
	<script src="../../js/aui.min.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">		
		window.onload = function(){
			apiready();
		}
		apiready = function() {
			var vm = new Vue({
				el: "#app",
				data: {
					keywords: '', // 搜索内容
					historyMax: 20, // 搜索历史最大条数
					historyData: [], // 搜索历史数据
					searchData: [], //搜索结果
				},
				created: function(){
					var _this = this;
					_this.$nextTick(function () {
						_this.$refs.search.focus();
					})
				},
				mounted: function() {
					var _this = this;
					this.getHistory();
		        },
		        updated: function () {
		            var _this = this;
		            _this.$nextTick(function () {
		
		            })
		        },
		        methods: {
					// 搜索事件
					search(){
						this.searchCallback(this.keywords);
					},
					//搜索回调事件
					searchCallback(keywords){
						this.setHistory(keywords);
						this.getHistory();
						//ajax...
						this.searchData = [ //测试
							{id: '0', name: '设备', url: '../../html/devices/devices-index.html'},
							{id: '1', name: '事件', url: '../../html/events/event-index.html'},
							{id: '2', name: '组件', url: '../../html/plugs/plugs-index.html'},
							{id: '3', name: '位置', url: '../../html/address/address-index.html'},
							{id: '4', name: '服务', url: '../../html/service/service-index.html'},
							{id: '5', name: '模板', url: '../demo-index.html'}
						];
					},
					// 搜索历史点击搜索
					tapHistorySearch(e){
						this.searchCallback(e.currentTarget.dataset.keywords);
					},
					// 存储搜索历史
					setHistory(keywords){
						//新数据插入到数组第一位
						this.historyData.splice(0,0,{"keywords": keywords});
						//数组去重
						var hash = {};
						this.historyData = this.historyData.reduce(function(item, next) {
							hash[next.keywords] ? '' : hash[next.keywords] = true && item.push(next);
							return item;
						}, []);
						//数据超出限制则删除最后一位
						if(this.historyData.length > this.historyMax){
							this.historyData.pop();
						}
						aui.setLocal("historyData", this.historyData);
					},
					// 获取搜索历史
					getHistory(){
						this.historyData = aui.getLocal('historyData') || [];
					},
					// 清空搜索历史
					clearHistory(){
						var _this = this;
						aui.confirm({
							title: '清空搜索历史',
							msg: '确定清空搜索历史吗?', 
							theme: 4, 
							btns: ['取消', '确定'],
						}, function(ret){
							if(ret.index == 1)
							{
								aui.removeLocal("historyData", this.historyData);
								_this.getHistory();
							}
						})
					},
					
		        }
			});
		}
	</script>
</body>
</html>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风如白话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值