项目完成后的小总结

项目完成了,突然想做个总结但是有点无从下手了。

做之前对于客户端给的接口很模式。然而定义好了格式要求就如此的愉快了。

先说说项目主要实现的功能吧

1,按键精灵

2,获取行情数据

3,各种input输入条件判断

4,发送数据(有json格式和string格式)

5,获取预警条件列表和预警结果列表,

6,排序,

7,预警结果分页获取

8,导出文件(excel,text等)

9,修改

10,删除

11,禁止右键,禁止F5,

12,接口有:新加,修改,删除,获取预警条件列表,获取预警结果,获取预警结果条数,获取第M-N条,导出,查看走势,预警方式,调老的预警,开启关闭预警,设置浏览器对话框大小、位置,有新的预警结果推送,添加成功推送,设置预警结为已读,等等

其实是一个小项目啦。。就简简单单的两个界面。

不过用的交互接口却很多。

1,字符串转换成对象:

var string = '[{}]';
var data = eval("data="+string);
data is object

 

2,导出excel|text格式的文件。

3,单击双击的判定

//定义setTimeout执行方法 
var TimeFn = null; 

$('div').click(function () { 
// 取消上次延时未执行的方法 
clearTimeout(TimeFn); 
//执行延时 
TimeFn = setTimeout(function(){ 
//do function在此处写单击事件要执行的代码 
},300); 
}); 

$('div').dblclick(functin () { 
// 取消上次延时未执行的方法 
clearTimeout(TimeFn); 
//双击事件的执行代码 
}) 

 4,//获取location.url中的某一个字段值

function getUrlParam(item) {
    var value = location.search.match(new RegExp("[\?\&]" + item + "=([^\&]*)(\&?)", "i"));
    return value ? value[1] : value;
}

 5,//时间戳转换成 01-02 20:10

function userDate(uData){
    var myDate = new Date(uData*1000);
    var nowDate = new Date();
    var nMonth = nowDate.getMonth() + 1;
    var nDay = nowDate.getDate();
    var year = myDate.getFullYear();
    var month = myDate.getMonth() + 1;
    var day = myDate.getDate();
    var hours = myDate.getHours();
    var minutes = myDate.getMinutes();
    if(nMonth == month && nDay == day){
        if(hours < 10){
            hours = '0'+hours;
        }
        if(minutes < 10){
            minutes = '0' +minutes;
        }
        return '今天' + ' ' + hours + ':' + minutes;
    }else{
        if(month < 10){
            month = '0'+month;
        }
        if(day < 10){
            day = '0'+day;
        }
        if(hours < 10){
            hours = '0'+hours;
        }
        if(minutes < 10){
            minutes = '0' +minutes;
        }
        return month + '-' + day + ' ' + hours + ':' + minutes;
    }
    
}

 

6,获取行情数据

//@charset "utf-8"
var hqQuote = {
	request : function (callback, stock, period) {
		//ZHANGSHU
		var dataType = ['ZQMC', 'NEW', 'ZHANGDIEFU', '3934664', 'HUANSHOU','HIGH','LOW','PRE'];
		try {
			var thsQuote = external.createObject("Quote");
		} catch(e) {
			alert('需要客户端环境');
			return false;
		}

		dataType = dataType.join(',');
		var reqObj = {
			code: stock,
			type: dataType,
			period: period,
			onready: function() {
				var result = {};
				dataType = dataType.split(',');
				for (var type in dataType) {
					if (isNaN(type)) {
						continue;
					}
					var ret = null;
					if (dataType[type] == '3934664') {
						ret = {
								code : stock,
								type : dataType[type],
								mode: 'beforecalclastfromsvrnow1st'
							};
					} else {
						ret = {code : stock, type : dataType[type]};
					}
					
					try {
						var data = thsQuote.getData(ret);
						data = eval(data);
						for (var i in data) {
							if (undefined == result[i]) {
								result[i] = {};
							}
							if ('zqmc' == ret.type || 'ZQMC' == ret.type) {
								result[i][ret.type] = data[i][ret.type];
								continue;
							}
							if (isNaN(data[i][ret.type])) {
								result[i][ret.type] = '--';
								continue;
							}
							result[i][ret.type] = parseFloat(data[i][ret.type]).toFixed(2);
						}
					} catch (exp) {
						continue;
					}
				}
				callback(result[stock], stock);
			}
		};

		thsQuote.request(reqObj);
	}
}
var condition = {
render : function (data, stock) {
var dataZhangdiefu = parseFloat(data['ZHANGDIEFU']).toFixed(2);
		var dataZhangshu = parseFloat(data['3934664']).toFixed(2);
		var dataHuanshou = parseFloat(data['HUANSHOU']).toFixed(2);
}
}

  

 

hqQuote.request(condition.render, code, 'now');

 

7,导出格式

/**
 * 组合导出格式
 * @param string formatType 格式,excel|text
 */
var tableTh = ['预警品种', '预警内容', '价格', '预警时间'];
var assembleText = function (formatType) {
	formatType = formatType || 'excel';
	var trObj = $("#proTableResult table tr"),
		//分隔符、换行符
		delimiter = formatType == 'text' ? '\t' : '\t',
		newline	= formatType == 'text' ? '\r\n' : '\r\n',
		returnText = tableTh.join(delimiter) + newline,
		trArr = new Array();
	
	trObj.each(function (i, tr) {
		var tdArr = new Array();
        $(tr).find('td').each(function (i, td) {
        	if (i < tableTh.length) {
            	tdArr.push($(td).html().replace(/<[^>]+>/g, ''));
        	}
        });
        trArr.push(tdArr.join(delimiter));
    });
	returnText += trArr.join(newline);
    //alert(returnText);
	return returnText;
}

 8,排序

//排序部分
/**
 * 排序方法
 * @param obj domObj 要排序的table对象
 * @param string sortType 排序的字段(时间max),'stockcode|time'
 */
var operaTable = function (tableObj, sortType, sort) {
	sortType = sortType || 'pcid';
	//获取tbody下的tr
	var tbBodyTr 		= $(tableObj).children('tbody').find('tr'),
		tbBodyTrLenght	= tbBodyTr.length,
		isTrue = false,
		tmp1,
		tmp2;
	for (var i = 0; i < tbBodyTrLenght - 1; i++ ) {
		for (var k = i + 1; k < tbBodyTrLenght; k++) {
			var kValue1 = $(tbBodyTr[i]).attr(sortType),
				kValue2 = $(tbBodyTr[k]).attr(sortType);
			isTrue = sort == 'asc' ? parseFloat(kValue1) > parseFloat(kValue2) :  parseFloat(kValue1) < parseFloat(kValue2);
			if (isTrue) {
                $(tbBodyTr[i]).next().after($(tbBodyTr[i]));
			}
		}
	}
}
$(".sort0, .sort1").click(function (e) {
	var target = $(e.target);
	var tableObj = $(this).parent().parent().siblings('div').find('table');
    //排序方式
	var sortType = '';
    var sort = 'desc';
	if (target.closest('.sort0').length > 0) {
		sortType = 'Key';
        sort = 'asc';
	} else if (target.closest('.sort1').length > 0) {
		sortType = 'Key';
        sort = 'desc';
	} else {
		return ;
	}
	$(this).siblings('a').show();
	$(this).hide();
	operaTable(tableObj, sortType, sort);
});

 9,div里面的滚动条滚到底部加载更多

 $("#proTableResult").scroll(function(){
        nScrollHight = $(this)[0].scrollHeight;
        nScrollTop = $(this)[0].scrollTop;
        if(nScrollTop + nDivHight >= nScrollHight){
//加载更多内容
}
)}

 10,each,push,join等的使用,

获取自定义属性值attr,

setTimeout,

键/值,

数组,

prototype原型,

实例化方法,

等等

 

 

你可能感兴趣的:(js,总结,项目)