项目完成了,突然想做个总结但是有点无从下手了。
做之前对于客户端给的接口很模式。然而定义好了格式要求就如此的愉快了。
先说说项目主要实现的功能吧
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原型,
实例化方法,
等等
?
?
原文:http://xiaomiya.iteye.com/blog/2178135