<script language="javascript">
/*------------------------------------------------------------
* S.Sams Lifexperience
* CopyRight (C) 2003-2007 S.Sams Lifexperience ScriptClassLib
* MSNLive: S.Sams#msn.com
* Http://blog.8see.net/
* UPdate by : 2007-01-19 转载传播请保留版权
*-----------------------------------------------------------*/
/* $ 获取指定对象
@element 对象名
可以使用对象名集合,返回值为对象的集合
如果您使用了 Prototype 类库, 请把该函数注释掉
Sams_object.Get() 中同样实现该函数的所有功能
*/
function $(element) {
if (arguments.length > 1) {
for (var i = 0, elements = [], length = arguments.length; i < length; i++)
elements.push($(arguments[i]));
return elements;
}
if (typeof element == 'string')
element = document.getElementById(element);
return element;
}
/// 浏览器相关操作
var Sams_browse = {
/* 检测浏览信息 */
checkBrowser : function ()
{
this.ver=navigator.appVersion
this.dom=document.getElementById?1:0
this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
this.ie4=(document.all && !this.dom)?1:0;
this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4=(document.layers && !this.dom)?1:0;
this.mac=(this.ver.indexOf('Mac') > -1) ?1:0;
this.ope=(navigator.userAgent.indexOf('Opera')>-1);
this.ie=(this.ie6 || this.ie5 || this.ie4)
this.ns=(this.ns4 || this.ns5)
this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns5 || this.ns4 || this.mac || this.ope)
this.nbw=(!this.bw)
return this;
},
/* 设为首页
@url 要设为首页的地址
*/
SetDefault : function ()
{
this.style.behavior='url(#default#homepage)';
this.setHomePage(this.GetUrl());
return false;
},
/* 复制指定URL地址
@Msg 要写入剪贴板的字符集
*/
SetCopy : function (Msg){
if(navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
clipboardData.setData('Text',Msg);
alert ("网址“"+Msg+"”/n已经复制到您的剪贴板中/n您可以使用Ctrl+V快捷键粘贴到需要的地方");
}
else
{
prompt("请复制网站地址:",Msg);
}
},
/* 加入收藏
@site 站点名称
@url 地址
*/
AddBookmark : function (site, url){
if(navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
window.external.addFavorite(url,site)
} else if (navigator.userAgent.toLowerCase().indexOf('opera') > -1) {
alert ("请使用Ctrl+T将本页加入收藏夹");
} else {
alert ("请使用Ctrl+D将本页加入收藏夹");
}
},
/* 打开Url指定宽度和高度的窗口 */
OpenWindows : function (url,width,height)
{
window.open(url,'newwin','width='+width+',height='+height);
return false;
},
/* 禁止浏览器的Javascript错误提示 */
CloseError : function(){
window.onerror = function(){return true;};
},
/* 获取浏览器URL */
GetUrl : function(){
return location.href;
},
/* 获取URL参数 */
GetUrlParam : function(){
return location.search;
},
/* 获取页面来源 */
GetFrom : function(){
return document.referrer;
},
/* 获取指定的URL参数值
@name 参数名
*/
Request : function(name){
var GetUrl = this.GetUrl();
var Plist = new Array();
if(GetUrl.indexOf('?') > 0)
{
Plist = GetUrl.split('?')[1].split('&');
}
else if(GetUrl.indexOf('#') > 0)
{
Plist = GetUrl.split('#')[1].split('&');
}
if (GetUrl.length > 0)
{
for(var i=0; i<Plist.length; i++)
{
var GetValue = Plist[i].split('=');
if (GetValue[0].toUpperCase() == name.toUpperCase())
{
return GetValue[1];
break;
}
}
return;
}
},
/* 直接将HTML写到新窗口
@title 标题
@msg 内容
*/
Popmsg : function PopIt(title,msg)
{
var popup = window.open('','popDialog','height=500,width=400,scrollbars=yes');
popup.document.write('<html><title>'+title+'</title><style>body{margin:10px;font:13px Arial;}span{text-line:20px;}</style><body><span style=/'font:14px arial;/'>'+msg + '</span></body></html>');
popup.document.close();
}
};
/// 对象操作
var Sams_object = {
/* 创建一个DIV对象
@ID 要创建的对象ID
@ClassName 创建对象的Class
@SetValue 设置该对象值
@ToDiv 将对象追加到指定的对象,如指定的对象不存在,则追加在Body的后面
返回 创建后的对象
*/
CreateDiv : function (ID,ClassName,SetValue,ToDiv){
var creatediv = document.createElement('div');
if(ID != null) creatediv.id = ID;
creatediv.style.position = 'absolute';
if(ClassName != null) creatediv.className = ClassName;
if(this.Get(ToDiv))
{
this.Get(ToDiv).appendChild(creatediv);
}
else
{
document.getElementsByTagName('body')[0].appendChild(creatediv);
}
this.SetValue(ID,SetValue);
return this.Get(ID);
},
/* 删除指定DIV对象
@objid 要删除的对象ID
返回 Bool 操作结果
*/
DeleteDiv : function (objid)
{
try
{
if(this.Get(objid))
{
var GetParent = this.Get(objid).parentNode;
GetParent.removeChild(this.Get(objid));
return true;
}
else
{
return false;
}
}
catch(e)
{
return false;
}
},
/* 获取浏览器对象
@id 要获取的对象ID
可以使用对象名集合,返回值为对象的集合
*/
Get : function (objid) {
if (arguments.length > 1) {
for (var i = 0, objids = [], length = arguments.length; i < length; i++)
objids.push(this.Get(arguments[i]));
return objids;
}
if (typeof objid == 'string')
{
if (document.getElementById) {
objid = document.getElementById(objid);
} else if (document.all) {
objid = document.all[objid];
} else if (document.layers) {
objid = document.layers[objid];
}
}
return objid;
},
/* 获取对象的值
@objid 对象ID
*/
GetValue : function (objid) {
if (typeof objid == 'string')
{
var getTagName = this.Get(objid).tagName.toLowerCase();
if (getTagName == 'input' || getTagName == 'textarea' || getTagName == 'select')
{
return this.Get(objid).value;
}
else if (getTagName == 'div' || getTagName == 'span')
{
return this.Get(objid).innerText;
}
}
else if (typeof objid == 'object')
{
return objid.value;
}
},
/* 设置指定对象的值,实现可以直接赋值或清除操作
@objid 对象ID
@inserValue 传入值(可选项 Null:清除该ID的值, 则直接赋值)
*/
SetValue: function(objid,inserValue) {
var getTagName = this.Get(objid).tagName.toLowerCase();
if (inserValue == null) inserValue = '';
if (getTagName == 'input' || getTagName == 'textarea')
{
this.Get(objid).value = inserValue;
}
else if (getTagName == 'div' || getTagName == 'sapn')
{
this.Get(objid).innerText = inserValue;
}
},
/* 拷贝对象值到剪贴板
@str 对象值
*/
CopyCode : function (str) {
var rng = document.body.createTextRange();
rng.moveToElementText(str);
rng.scrollIntoView();
rng.select();
rng.execCommand("Copy");
rng.collapse(false);
},
/* 显示隐藏一个对象
@Objid 对象ID
@isshow 具体操作,指定Obj为False : none或者True : block (可选)
*/
ShowHidd : function(objid,isshow){
if (isshow != null)
{
if(isshow)
{
this.Get(objid).style.display = 'block';
}
else
{
this.Get(objid).style.display = 'none';
}
}
else
{
if(this.Get(objid).style.display == 'none')
{
this.Get(objid).style.display = 'block';
}
else
{
this.Get(objid).style.display = 'none';
}
}
},
/* 当前对象是否可见
@objid 对象ID
*/
IsVisible : function(objid){
if(this.Get(objid))
{
try
{
if (this.Get(objid).style.display == 'none')
{
return false
}
if(this.Get(objid).style.visibility == 'hidden')
{
return false;
}
return true;
}
catch(e)
{
return false;
}
}
else
{
return false;
}
}
};
/// 字符处理
var Sams_string = {
/* 取左边的指定长度的值
@str 要处理的字符集
@n 长度
*/
Left : function (str,n)
{
if(str.length > 0)
{
if(n>str.length) n = str.length;
return str.substr(0,n)
}
else
{
return;
}
},
/* 取右边的指定长度的值
@str 要处理的字符集
@n 长度
*/
Right : function (str,n)
{
if(str.length > 0)
{
if(n>=str.length) return str;
return str.substr(str.length-n,n);
}
else
{
return;
}
},
/* Trim:清除两边空格
@str 要处理的字符集
*/
Trim : function (str)
{
if (typeof str == 'string') return str.replace(/(^/s*)|(/s*$)/g, '');
},
/* LTrim:清除左边的空格
@str 要处理的字符集
*/
Ltrim : function (str)
{
if (typeof str == 'string') return str.replace(/(^/s*)/g, '');
},
/* RTrim: 清除右边的空格
@str 要处理的字符集
*/
Rtrim : function (str)
{
if (typeof str == 'string') return str.replace(/(/s*$)/g, '');
},
/* 清除前后的非字符
@str 要处理的字符集
*/
strip : function(str) {
if (typeof str == 'string') return str.replace(/^/s+/, '').replace(/(^/s*)|(/s*$)/g, '');
},
/* 过滤字符里面的HTML标签
@str 要处理的字符集
*/
stripTags : function(str) {
if (typeof str == 'string')return str.replace(/<//?[^>]+>/gi, '').replace(/(^/s*)|(/s*$)/g, '');
}
};
/// 时间相关操作
var Sams_time = {
/* 获取当天日期 yyyy-MM-dd */
GetDateNow : function (){
var d,y,m,dd;
d = new Date();
y = d.getYear();
m = d.getMonth() + 1;
dd = d.getDate();
return y+"-"+m+"-"+dd;
},
/* 获取指定日期后的特定天数的日期值
@toDate 当前指定的日期
@N 要添加的日期数
*/
AddDays : function(toDate,N){
var aDate=this._cvtISOToDate(toDate);
if (!aDate) return "";
var millis=86400000 * N;
aDate=new Date(aDate.getTime()+millis);
return this._fmtDateISO(aDate);
},
_fmtDateISO : function (aDate) {
with (aDate) {
var mm=getMonth()+1;
if (mm<10) {mm='0'+mm;}
var dd=getDate();
if (dd<10) {dd='0'+dd;}
return (getFullYear() + '-' + mm + '-' + dd);
}
},
_cvtISOToDate : function (isoDate) {
var atomDate= isoDate.split('-');
var aDate=new Date(parseInt(atomDate[0],10),parseInt(atomDate[1],10)-1,parseInt(atomDate[2],10),6,0,0);
return aDate;
}
};
/// 图像相关操作
var Sams_media = {
/* 为单一图像添加鼠标中键放大缩小功能, 批量可以直接用 ResizeImage(指定添加该功能的图片大小:Int) 即可 (该功能只适用于IE)
objid 对象ID
*/
ZoomFun : function(objid){
Sams_object.Get(objid).onmousewheel = function(){return Sams_media.imagecontrol(this);}
},
/* 重置图片尺寸同时添加放大功能 (该功能只适用于IE)
@IntSize 指定图像的大小
如果适合图像大小就添加放大缩小功能
*/
ResizeImage: function (IntSize) {
var imgsinlog=document.getElementsByTagName('img');
for(j=0; j<imgsinlog.length; j++) {
if (imgsinlog[j].width >= IntSize) {
imgsinlog[j].width = IntSize;
imgsinlog[j].style.cursor= 'pointer';
imgsinlog[j].onclick = function() {window.open(this.src);}
if (navigator.userAgent.toLowerCase().indexOf('ie') > -1) {
imgsinlog[j].title = '您可以用鼠标中键或者使用Ctrl+鼠标滚轮缩放图片,点击图片可在新窗口打开';
imgsinlog[j].onmousewheel = function(){return Sams_media.imagecontrol(this);};
}
else
{
imgsinlog[j].title = '点击图片可在新窗口打开';
}
}
}
},
imagecontrol : function(obj){
var zoom=parseInt(obj.style.zoom, 10)||100;zoom+=event.wheelDelta/12;
if (zoom>0) obj.style.zoom=zoom+'%';
return false;
},
/* 如果图像出现下载不了等异常,显示的错误提示图片
@errimgpath 显示错误提示的图像路径
*/
ImagesError : function(errimgpath){
var imglist = document.getElementsByTagName('img');
for(j=0; j<imglist.length; j++) {
imglist[j].onerror = function(){
this.src = errimgpath;
}
}
},
/* 显示媒体
@mFile 文件路径
@mFileType 文件类型(可为空,如为Flash,要指定为swf类型)
@ObjID 对象ID
@mWidth 显示的对象宽度
@mHeight 显示对象的高度
注: 可以指定对象的ID, 如果ID不存在,会自动创建,追加在Body后面
*/
ShowMedia : function (mFile, mFileType, ObjID, mWidth, mHeight) {
var mediaStr;
switch(mFileType){
case "swf":
mediaStr="<object codeBase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='"+mWidth+"' height='"+mHeight+"'><param name='movie' value='"+mFile+"'><param name='quality' value='high'><param name='AllowScriptAccess' value='never'><embed src='"+mFile+"' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='"+mWidth+"' height='"+mHeight+"'></embed></OBJECT>";
break;
default :
mediaStr="<object width='"+mWidth+"' height='"+mHeight+"' classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6'><param name='url' value='"+mFile+"' /><embed width='"+mWidth+"' height='"+mHeight+"' type='application/x-mplayer2' src='"+mFile+"'></embed></object>";
}
var mediaDiv = Sams_object.Get(ObjID);
if (mediaDiv) {
mediaDiv.innerHTML = mediaStr;
}
else
{
mediaDiv = document.createElement("div");
mediaDiv.id = ObjID;
mediaDiv.innerHTML = mediaStr;
document.getElementsByTagName('body')[0].appendChild(mediaDiv);
}
return false;
}
};
/// 样式相关操作
var Sams_style = {
/* 改变字体大小
@objid 对象ID
@size 字号
*/
doZoom : function (objid,size){
Sams_object.Get(objid).style.fontSize=size+'px';
},
/* 改变指定对象样式
@objid 对象ID
@className 要更改的ClassName
*/
ClassName: function(objid, className) {
Sams_object.Get(objid).className = className;
},
/* 对象定位
@obj 要定位的对象
返回 X.Y 结果的数组对象
*/
GotoXY : function (obj) {
var t=obj.offsetTop;
var l=obj.offsetLeft;
while(obj=obj.offsetParent){
t+=obj.offsetTop;
l+=obj.offsetLeft;
}
return Array(t,l);
}
};
/// 科学计算
var Sams_account = {
/* 逢1进10计算
@ 数值
*/
GetTen: function (i)
{
var items_One,Get_One;
if (i.length > 1&& (/^/d+$/.test(i)))
{
items_One = i.substr(0,i.length-1);
Get_One = i.substr(i.length-1,1);
if (parseInt(Get_One)>0)
{
items_One = parseInt(items_One)+1;
items_One = items_One + '0';
}
else
{
items_One = items_One + '0';
}
}
else
{
items_One = i;
}
return items_One;
}
};
/// 数据验证(所有数值返回值均为Bool型)
var Sams_validate = {
/* 是否是数字型数据
@str 字符集
*/
IsNumber : function(str){
if (/^/d+$/.test(str)){return true;}else{return false;}
},
/* 是否是数字型数据
@objid 对象ID
*/
IsNumberObj : function(objid){
return this.IsNumber(Sams_object.GetValue(objid));
},
/* 是否是自然数型数据
@str 字符集
*/
IsInt : function(str){
if (/^(/+|-)?/d+$/.test(str)){return true;}else{return false;}
},
/* 是否是自然数型数据
@objid 对象ID
*/
IsIntObj : function(objid){
return this.IsInt(Sams_object.GetValue(objid));
},
/* 是否是中文字符
@str 字符集
*/
IsChinese : function(str)
{
if (/^[/u4e00-/u9fa5]+$/.test(str)){return true;}else{return false;}
},
/* 是否是中文字符
@objid 对象ID
*/
IsChineseObj : function(objid)
{
return this.IsChinese(Sams_object.GetValue(objid));
},
/* 是否为英文字母
@str 字符集
*/
IsLower : function(str)
{
if (/^[A-Za-z]+$/.test(str)){return true}else{return false;}
},
/* 是否为英文字母
@objid 对象ID
*/
IsLowerObj : function(objid)
{
return this.IsLower(Sams_object.GetValue(objid));
},
/* 是否为正确的网址
@str 字符集
*/
IsUrl : function(str)
{
var myReg = /^((http:[/][/])?/w+([.]/w+|[/]/w*)*)?$/;
if(myReg.test(str)){return true;}else{return false;}
},
/* 是否为正确的网址
@objid 对象ID
*/
IsUrlObj : function(objid)
{
return this.IsUrl(Sams_object.GetValue(objid));
},
/* 是否为正确的Email形式
@str 字符集
*/
IsEmail : function(str)
{
var myReg = /^([-_A-Za-z0-9/.]+)@([_A-Za-z0-9]+/.)+[A-Za-z0-9]{2,3}$/;
if(myReg.test(str)){return true;}else{return false;}
},
/* 是否为正确的Email形式
@objid 对象ID
*/
IsEmailObj : function(objid)
{
return this.IsEmail(Sams_object.GetValue(objid));
},
/* 是否为正确的手机号码
@str 字符集
*/
IsMobile : function(str)
{
var regu =/(^[1][3][0-9]{9}$)|(^0[1][3][0-9]{9}$)/;
var re = new RegExp(regu);
if (re.test(str)){return true;}else{return false;}
},
/* 是否为正确的手机号码
@objid 对象ID
*/
IsMobileObj : function(objid)
{
return this.IsMobile(Sams_object.GetValue(objid));
}
};
/*
实现Ajax功能
Sams_ajax.SendRequest('GET', url, null, recall, "addtohome");
Sams_ajax.SendRequest('GET', url, null, null);
obj.responseText;
*/
var Sams_ajax = {
_objPool: [],
_getInstance: function (){
for (var i = 0; i < this._objPool.length; i ++){
if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4){
return this._objPool[i];
}
}
this._objPool[this._objPool.length] = this._createObj();
return this._objPool[this._objPool.length - 1];
},
_createObj : function (){
if (window.XMLHttpRequest){
var objXMLHttp = new XMLHttpRequest();
}
else{
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for(var n = 0; n < MSXML.length; n ++){
try{
var objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch(e){
}
}
}
if (objXMLHttp.readyState == null){
objXMLHttp.readyState = 0;
objXMLHttp.addEventListener("load", function (){
objXMLHttp.readyState = 4;
if (typeof objXMLHttp.onreadystatechange == "function"){
objXMLHttp.onreadystatechange();
}
}, false);
}
return objXMLHttp;
},
/// 开始发送请求
SendRequest : function (method, url, data, callback,funparam,funparam2){
var objXMLHttp = this._getInstance();
with(objXMLHttp){
try{
if (url.indexOf("?") > 0){
url += "&randnum=" + Math.random();
}
else{
url += "?randnum=" + Math.random();
}
open(method, url, true);
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
send(data);
onreadystatechange = function (){
if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304))
{
callback(objXMLHttp,funparam,funparam2);
}else{
callback(null,funparam,funparam2);
}
}
}
catch(e){
alert(e);
}
}
}
};
/// Cookies操作
var Sams_cookies = {
/* cookies设置函数
@name Cookies名称
@value 值
*/
setCookie : function (name, value)
{
try
{
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
if(expires!=null)
{
var LargeExpDate = new Date ();
LargeExpDate.setTime(LargeExpDate.getTime() + (expires*1000*3600*24));
}
document.cookie = name + "=" + escape (value)+((expires == null) ? "" : ("; expires=" +LargeExpDate.toGMTString()));
return true;
}
catch(e)
{
return false;
}
},
/* cookies读取函数
@Name Cookies名称
返回值 Cookies值
*/
getCookie : function (Name)
{
var search = Name + "="
if(document.cookie.length > 0)
{
offset = document.cookie.indexOf(search)
if(offset != -1)
{
offset += search.length
end = document.cookie.indexOf(";", offset)
if(end == -1) end = document.cookie.length
return unescape(document.cookie.substring(offset, end))
}
else
{
return;
}
}
}
};
</script>
<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" id="I"><br/>
<input type="button" value="指定日期加N天后的日期值" onclick="alert(Sams_time.AddDays('2006-12-12','123'));">
<input type="button" value="请求URL指定参数的值" onclick="alert(Sams_browse.Request('o'));">
<input type="button" value="显示隐藏Medio" onclick="Sams_object.ShowHidd('I');">
<input type="button" value="字符处理" onclick="Sams_object.SetValue('ToHtml',Sams_string.stripTags(Sams_object.GetValue('Content')));">
<input type="button" value="清除字符" onclick="Sams_object.SetValue('ToHtml');Sams_object.SetValue('S','S.Sams lifexperience!');">
<input type="button" value="FormValue" onclick="var ads = Sams_object.Get('Content','ToHtml');for(var s in ads){alert(ads[s].value);};">
<input type="button" value="CopyUrl" onclick="Sams_browse.SetCopy(Sams_browse.GetUrl());">
<div id="medias"></div>
<textarea name="Content" wrap="virtual" id="Content" style="width:100%;height:100px;background:#F9F9F9;"> <STRONG>公交车</STRONG><BR> 北京的公交车为人们的出行提供了很大方便,不仅有普通的公共电车或汽车,还有“8”字头的空调车、“特”字头的特线双层巴士及夜班车(201路到212路)等,票价有多种,其中空调车、特线车、夜班车无论是否开空调,票价一律为2元/人,有人售票车则按线路长短实行多级制票价。</P>
</textarea>
<div style="display:;">
<textarea id="ToHtml" style="width:100%;height:100px;background:#FFFFCC;"></textarea>
</div>
<div id="S">夜班车无论是否开空调,票价一律为2元/人,有人售票车则按线路长短实行多级制票价</div>
<style>
.AlertDivCity_Class{background:#eeeeee;width:150px;height:auto;position:absolute;}
</style>
<script language="JavaScript">
<!--
Sams_media.ZoomFun('I');
//Sams_media.ResizeImage(286);
//Sams_media.ShowMedia('http://audreyhepburn.star.uland.com/resource/media/0/17/17620/20061002231151823.mp3','','mediasw','500','500');
//alert(Sams_object.CreateDiv('SamsID','AlertDivCity_Class','CreateDiv Value','S').innerText);
//setTimeout(function(){if(Sams_object.DeleteDiv('SamsID')){alert('Div delete succeed !')}},1000);
if(document.getElementById('ToHtml').parentNode.style.display != 'none')Sams_object.Get('ToHtml').focus();
//-->
</script>
相关推荐
WPF数据可视化:LiveCharts自定义X轴与Y轴的5个实战技巧(附完整代码)
本文详细介绍了在WPF应用中使用LiveCharts进行数据可视化时,自定义X轴与Y轴的5个核心实战技巧。内容涵盖精确控制刻度步距、深度定制视觉样式、实现多轴布局对比、优化显示空间以及构建响应式动态轴,并提供了完整的C#和XAML代码示例,帮助开发者创建专业且用户体验出色的图表。
Web 版翻译者资料库
本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。
两轮差速小车循线控制原理分析
硬件资料设定:小车驱动来自于两个相同的电机,转向依靠两轮差速实现,小车前后左右安装超声波传感器,前后各一个,左右各两个; 功能目标:假设小车左侧有墙壁,通过超声波测距实现按指定距离沿墙行驶 参数设定:车轮半径r=3cm,车轮间距wd=10cm,车身长length=16cm,侧边超声波传感器前后各一个,假设一个在车头一个在车尾,间距=车身=length=16cm,小车线速度恒定v = 0.2m/s,距离墙d=10cm,假设超声波传感器以10Hz的频率采集距离。 在以上条件下,设定小车出发点,方向与墙平行
React 性能:memo / useMemo / useCallback
讲清 memo/useMemo/useCallback 的配合与边界,先测量再优化,避开常见过早优化。
电商秒杀场景下,如何用Redis+Lua脚本实现原子性库存扣减(附完整代码)
本文针对电商秒杀场景下的高并发与超卖难题,详细解析了如何利用Redis的原子性命令与Lua脚本实现可靠的库存扣减。通过对比多种方案,阐述了Redis+Lua作为黄金搭档的技术原理,并提供了从基础扣减到预扣减模型的完整代码实现,确保在高并发下数据的一致性与系统性能。
matinal:S4 HANA 详解ACDOCA与BSEG的区别都在这了
当你在Coding Block中添加自定义字段的时候
V8 机制、手写核心函数与 TypeScript 类型体操
或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",
F5 GTM DNS 实战指南:智能DNS的监控与健康检查机制
本文深入解析F5 BIG-IP GTM智能DNS的核心机制,重点阐述其监控与探针两大功能如何协同工作。监控器负责深度检查服务器应用健康,确保服务可用性;探针则实时测量网络路径质量,实现基于延迟的智能流量调度。文章通过实战配置步骤,指导如何构建逻辑架构、建立iQuery通信、配置业务级健康检查及探针,从而构建高可用、高性能的全局负载均衡解决方案。
DSH (DeepSeek Harness) Windows 升级安装指南20261107
注意:如果在普通窗口执行 nvm 提示找不到命令,或执行 nvm use 提示 Access is denied,请务必关闭当前窗口,重新打开一个管理员CMD 执行上述完整路径命令。找到 .credentials.yaml,将其重命名为 .credentials.yaml.bak(备份并使其失效)。Node.js Storage Location:可改到非系统盘(如 D:\dev\nvm,避免路径含空格或中文)。打开文件资源管理器,进入 C:\Users<你的用户名>.dsh\。
从零构建:用Arduino和MCP2515模块搭建你的第一个CAN Bus网络
本文详细介绍了如何使用Arduino和MCP2515模块从零搭建CAN Bus网络,实现温湿度数据的传输与显示。涵盖硬件连接、软件配置、发送端与接收端代码实现,以及系统调试和进阶应用,帮助初学者快速掌握CAN总线通信技术。
基于STM32的IMU惯性/姿态解算与多参数上位机可视化实现_资料编号38
本项目实现基于STM32F103C8T6标准库,对姿态/惯性(IMU)传感器姿态解算,通过USB-TTL转串口模块将姿态角/欧拉角、加速度、角速度、磁场、气压、海拔高度、磁力计温度、气压计温度等数据显示在PC端上位机,系统采用可充电锂电池供电。
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
# SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在 > 这是一套基于 Spring Boot 的服装销售平台源码,配套 `db.sql` 建表脚本,业务覆盖商品展示、购物车、订单流转、收货地址、订单评价、商品评论、在线客服、轮播图和资讯。形态是**前后台双端**:前台是顾客逛的商城,后台是管理员管的控制台。本文带你看清里面有什么、怎么跑
深度学习框架对比:AI开发如何选择
你是否遇到过这样的困惑:想做一个图像分类模型,朋友推荐PyTorch;公司要部署智能客服,同事说用TensorFlow;想快速验证想法,学长又提到Keras……深度学习框架种类繁多,功能重叠却各有侧重。本文将覆盖主流框架(PyTorch/TensorFlow/Keras/JAX/MXNet等),从开发者真实需求出发,总结选择框架的核心维度。本文将按照“认识框架→对比特性→实战选择”的逻辑展开:先通过生活比喻理解各框架特点,再用代码对比核心功能,最后结合真实场景给出选择建议。动态计算图。
微信小程序-wxs
在微信开发者工具中右键创建.wxs后缀的文件。每个.wxs文件也是一个独立模块,同样使用导出内容。示例(文件return d;FOO: foo,bar: bar(外联定义参考官方文档)
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
使用echarts模拟甘特图
项目中需按时间段展示不同颜色的数据,通过解析时长并统计各类型总时长,结合预设颜色映射表(含自定义与默认色),动态生成ECharts图表。利用sumByTypeName聚合数据,为每类分配对应颜色,实现图例与柱状图的精准匹配,确保多时段、多类型数据可视化清晰准确。
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
【技术专题】JavaScript 网页技术 - JavaScript 流程控制
小锋老师推出《一天学会JavaScript(无废话版)》视频教程,涵盖基础语法、流程控制、函数、数组对象、DOM操作及ES6新特性。内容精炼,配套课件与源码打包下载,助力快速入门。重点讲解if/else、switch、for/while循环、for...of/in遍历及break/continue使用场景,并通过成绩判断实例演示实际应用。适合零基础学习者高效掌握核心技能。
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
基于 FastAPI+LangChain+LangGraph+Agent+Vue3+MySQL 的房产数据采集与房价预测分析平台
本文介绍一个完整的「房产数据采集+AI房价预测」全栈项目,涵盖FastAPI异步后端、LangGraph Agent智能问答、爬虫采集、机器学习预测与Vue3前端,实现从数据采集到AI交互的闭环。项目融合多技术栈,具备真实业务场景与生产级设计(如降级策略、流式输出、多模型对比),兼具简历亮点与答辩演示优势,可系统性提升工程能力,并附高频面试题解析,是理想的技术综合实践项目。
Agent 的 ReAct、Plan、Execute、Reflection 模式
本文系统解析 Agent 的 ReAct、Plan、Execute、Reflection 四模式,揭示其核心为“下一步谁定”与“错了怎么发现”两大问题。ReAct 逐步决策,适合动态环境但易冗余;Plan 一次性规划,高效却惧变化;Execute 严格落地,需明确判据与失败策略;Reflection 事后校验,强化纠错闭环。四者协同:外层规划,执行中嵌入思考,每步后反思,连续失败才重规划,构建稳定可控的智能体工作流。
货运APP、货运小程序开发:网络货运平台与同城配送搬家系统实战
本文介绍一套完整的货运平台系统,涵盖货运APP、小程序、网络货运、同城配送、搬家预约等场景,基于SpringBoot+MyBatisPlus+MySQL技术栈,采用uni-app实现多端统一开发,配套TMS运输管理与物流管理系统,支持下单、派单、运输、结算全流程,适用于货运搬家、物流搬运与配送业务,可作为物流软件及TMS系统的参考实现。
Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构
本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。
Vue-Router
本文详解前端路由原理与实现,以网易云音乐为例,介绍通过 vue-router 实现页面无刷新切换。核心步骤包括:安装模块、创建路由实例、注册应用、配置页面组件与路由出口。使用 router-link 实现声明式导航,结合 query 和 params 传参,支持模糊与精确匹配激活状态。强调 useRoute(读取参数)与 useRouter(执行跳转)的区别,帮助开发者掌握单页应用路由的核心机制。
LangGraph == 循环结构的实现
这是静态约束,不会参与运行时校验。主要作用是提升代码可读性、通过静态类型检查,同时帮助 LangGraph。也就是说,是否继续重试,在当前实现中主要由大模型决定,而不是由程序逻辑强制保证。因此,如果模型在多次工具调用失败后选择停止重试并生成最终回答,运行图不会阻止它。函数,也不再需要调用 add_conditional_edges()只要大模型持续返回工具调用,流程就会不断回到 llm_node。的缩写,即“推理 + 行动”架构。,运行时只负责判断具体走哪一条路径。
Vue 前端开发 AI 对话页面:流式消息渲染、文件上传
关键点是不能手动设置 Content-Type 为 multipart/form-data,必须由浏览器自动生成带有 boundary 的请求头,否则后端无法解析。思路:将对象序列化为 JSON 字符串,作为 FormData 的一个普通字段(如 formData.append(‘payload’, JSON.stringify(data))),后端接收该字段后再反序列化。若上传大文件(>10MB),需实现独立的分片上传接口,在提交对话前先获取文件 id 或 url,再随文本发送引用。移除输入框的禁用态;
Flux 架构:一个单向数据流库是怎么跑起来的
状态只有一份 + 数据单向流 + reducer 是纯函数 + 中间件链可组合 + 视图层声明式绑定。这 30 行就是这套思想的最小完整样本:两次useStore订阅、一次拿链式 dispatch、四个按钮对应四种 action(其中一种是 thunk 形态)。
纯 Go 写的 JS 引擎,跑分超过了 C 语言的 QuickJS
moejs 是一个纯 Go 编写的高性能 JavaScript 运行时,专为 Go 程序中的插件沙箱场景设计。发布于 2026 年 11 月,由 new-api 维护者 Calcium-Ion 开发,相较 C 版 QuickJS 快 35%,内存占用仅 81 KiB,单次调用仅 6.9 微秒。支持快速复用运行时、零拷贝解析、安全沙箱与 TypeScript 直接编译,通过 test262 80971 个用例零失败。适合高并发插件系统,如 AI 网关钩子处理,已在实际场景中实现请求吞吐量提升 8.6 倍。仓库
vue3 markdown编辑框与压缩包文件上传及预览
el-input v-model="form.author" placeholder="作者/组织" maxlength="50" clearable /><el-select v-model="form.category" placeholder="请选择标签" class="full-width"><el-select v-model="form.license" placeholder="请选择" class="full-width">'编辑技能' : '新建技能' }}</div>
691



被折叠的 条评论
为什么被折叠?



