YOYO的最新BLOG文章

Mar
06

Javascript一向以他的灵活随意而著称,这也使得它的功能可以非常的强大,而由于没有比较好的调试工具,又使得它使用起来困难重重,尤其使对于一些初学者,更是感觉到无从下手。今天探讨的问题是用javascript获取textarea中光标的位置。

对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到好的办法。昨天我在网上找到了一段javascript代码,本来不想把原版放在这里的,就是因为太精彩了,怕我给改坏了,所以还是原版放在这里吧。

var start=0;
    
var end=0;
    
function add(){       
        
var textBox = document.getElementById("ta");
        
var pre = textBox.value.substr(0, start);
        
var post = textBox.value.substr(end);
        
textBox.value = pre + document.getElementById("inputtext").value + post;
    
}
    
function savePos(textBox){
        
//如果是Firefox(1.5)的话,方法很简单
        
if(typeof(textBox.selectionStart) == "number"){
            
start = textBox.selectionStart;
            
end = textBox.selectionEnd;
        
}
        
//下面是IE(6.0)的方法,麻烦得很,还要计算上'\n'
        
else if(document.selection){
            
var range = document.selection.createRange();
            
if(range.parentElement().id == textBox.id){
                
// create a selection of the whole textarea
                
var range_all = document.body.createTextRange();
                
range_all.moveToElementText(textBox);
                
//两个range,一个是已经选择的text(range),一个是整个textarea(range_all)
                
//range_all.compareEndPoints()比较两个端点,如果range_all比range更往左(further to the left),则                //返回小于0的值,则range_all往右移一点,直到两个range的start相同。
                
// calculate selection start point by moving beginning of range_all to beginning of range
                
for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
                    
range_all.moveStart('character', 1);
                
// get number of line breaks from textarea start to selection start and add them to start
                
// 计算一下\n
                
for (var i = 0; i <= start; i ++){
                    
if (textBox.value.charAt(i) == '\n')
                        
start++;
                
}
                
// create a selection of the whole textarea
                
var range_all = document.body.createTextRange();
                
range_all.moveToElementText(textBox);
                
// calculate selection end point by moving beginning of range_all to end of range
                
for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end ++)
                    
range_all.moveStart('character', 1);
                    
// get number of line breaks from textarea start to selection end and add them to end
                    
for (var i = 0; i <= end; i ++){
                        
if (textBox.value.charAt(i) == '\n')
                            
end ++;
                    
}
                
}
            
}
        
document.getElementById("start").value = start;
        
document.getElementById("end").value = end;
    
}

下面是在页面中调用js代码的方法:

<form action="a.cgi">
<table border="1" cellspacing="0" cellpadding="0">
    
<tr>
        
<td>start: <input type="text" id="start" size="3"/></td>
        
<td>end: <input type="text" id="end" size="3"/></td>
    
</tr>
    
<tr>
        
<td colspan="2">
            
<textarea id="ta" onKeydown="savePos(this)"
                              
onKeyup="savePos(this)"
                              
onmousedown="savePos(this)"
                              
onmouseup="savePos(this)"
                              
onfocus="savePos(this)"
                              
rows="14" cols="50"></textarea>
        
</td>
    
</tr>
    
<tr>
        
<td><input type="text" id="inputtext" /></td>
        
<td><input type="button" onClick="add()" value="Add Text"/></td>
    
</tr>
</table>
</form>

此代码的原文是:http://blog.csdn.net/liujin4049/archive/2006/09/19/1244065.aspx,在此谢过!

这段js代码同时支持IE和Firefox,甚是精彩,可见此人js功力深厚啊,呵呵。

Btw:听说Firefox现在的市场占有率已经达到17%了,而IE8也快出来了,浏览器之间又会掀起一场你死我活的争斗,而这种争斗可以使浏览器的解析标准会越来越规范,我们写代码也会越来越省事,这实在是一件值得高兴的事。

Feb
20

我要地图一直是我最情有独钟的电子地图网站,网站简洁、速度快,更重要的是内容详尽,连一些乡镇都标记的很精确。我要地图还有桌面版软件和绿色版的灵图UU,而最让我高兴的是他提供了API接口(见下面的效果图),可以让我们很轻松的就可以在我们的网站上嵌入地图,对于标记一些地理位置是个很不错的选择,下面就说一下在网站上加入地图的方法。

我要地图API接口

第一、打开我要地图网站的地图接口API页面:http://api.51ditu.com/。

第二、点击左侧的地图接口链接,来到地图应用接口页面,页面的下方有一个小地图和一段JS代码,把这段JS代码复制到网页种就可以呈现上面地图的效果。

第三、打开网页的源代码,找到maps.cityNameAndZoom( “beijing” , 2 );这行,修改第二个数字值可以调试地图的比例尺。

第四、找到var point = new LTPoint( 11640969 , 3989945 );这一句,修改里面的值,我们就可以把地图上“我的位置”的标记移动到我们想让它呆的地方去了。

第五,我们也可以把“我的位置”改为我们想要的名字,例如:中关村。

通过这些简单的修改,我们就可以把一个地图放到我们的网页里面了,这里我讲的是最简单的方法,如果你想得到更好的效果,可以参考API文档(http://mapplet.51ditu.com/guide.html),如果对上面讲得修改不知道所以然的话,可以先了解一些地图的基础知识(http://api.51ditu.com/docs/info.html#info1),然后再看API开发文档。

Oct
14

前几天在找获取窗口和网页页面参数的javascript代码的时候,发现了一个函数,这个函数绕了很多次就得到一个有四个值的数组,也不实用,于是我把得到的一些参数列了下来,以便以后可以随时查阅。

网页可见区域宽:document.body.clientWidth
网页可见区域高:document.body.clientHeight
网页可见区域宽:document.body.offsetWidth (包括边线的宽)
网页可见区域高:document.body.offsetHeight (包括边线的宽)
网页正文全文宽:document.body.scrollWidth
网页正文全文高:document.body.scrollHeight
网页被卷去的高:document.body.scrollTop
网页被卷去的左:document.body.scrollLeft
网页正文部分上:window.screenTop
网页正文部分左:window.screenLeft
屏幕分辨率的高:window.screen.height
屏幕分辨率的宽:window.screen.width
屏幕可用工作区高度:window.screen.availHeight
屏幕可用工作区宽度:window.screen.availWidth
阅读全文 ->

Aug
10

昨天给大家推荐了一个Lightbox,今天再推荐一个网页文字编辑工具FCKeditor,支持IE和Firefox,我以前用的是ewebeditor,由于那个不支持Firefox,所以我最终还是选择了FCKeditor,竞争是不是很残酷。

他的使用方法是很简单的,在从官方下载的文件里面都有相关的说明,并且有10多个实例代码,我给大家举一个例子吧,其他的可以自己去参考FCKeditor下载包里面的实例。

首先你得找到fckeditor.js这个文件,在你的网页文件里面引用这个文件:

<script src="fckeditor.js" type="text/javascript"></script>

然后在你的网页里面再加入一段js代码:
阅读全文 ->

Aug
10

Lightbox JS 是一个简单而又不张扬地用来把图片覆盖在当前页面上的脚本,它能被快速安装并且运作于所有流行的浏览器。

目前最新更新 Version 2.03.3

· 图片集: 分组相关的图片并且能轻松的导航它们
· 视觉特效: 奇特的自适应调整
· 向后兼容: yes!

点击这里查看实例演示

如何使用:

步骤 1 - 安装

1、Lightbox v2.0 使用 Prototype 框架和 Scriptaculous 效果库。你将需要外调这三个 Javascript 文件放在你的网页header里面。

<script src="js/prototype.js" type="text/javascript"></script>
<script src="js/scriptaculous.js?load=effects" type="text/javascript"></script>
<script src="js/lightbox.js" type="text/javascript"></script>

2、外调 Lightbox CSS 文件 (或添加 Lightbox 样式到你现行的样式表中)。

<link href="css/lightbox.css" rel="stylesheet" type="text/css" media="screen" />

3、检查 CSS 并确定调用的 prev.gif 和 next.gif 文件在正确的位置。同样要确定调用的 loading.gif 和 close.gif 文件及 lightbox.js 文件在正确的位置。
阅读全文 ->

May
10

今天用到一个功能,就是用javascript来获取鼠标坐标,在网上找到了event.clientX和event.clientY,如实例一。
实例一:

<script language="javascript" type="text/javascript"> function m(){ document.getElementById("area").innerHTML=event.clientX +" , "+event.clientY; } </script>
<p id="area" style="border: 1px solid ; font-size: 36px; width: 800px; height: 600px" onmousemove="m();">d</p>

这段代码在IE下面正常,但是在Firefox下面无法运行,于是继续寻找在Firefox下面的解决办法,最终在博客园里找到了Firefox中Javascript使用event对象需要注意的问题,给函数加了一个参数就可以了,我修改的代码即实例二。
阅读全文 ->

Sep
20

一、window.open()支持环境:
JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+

二、基本语法:

window.open(pageURL,name,parameters);

其中:
pageURL 为子窗口路径
name 为子窗口句柄
parameters 为窗口参数(各参数用逗号分隔)

三、示例:

<script> <!-- window.open (\'page.html\',\'newwindow\',\'height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no\') //写成一行 --> </script>

脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。请对照。
上例中涉及的为常用的几个参数,除此以外还有很多其他参数,请见四。

四、各项参数
其中yes/no也可使用1/0;pixel value为具体的数值,单位象素。

参数 | 取值范围 | 说明

alwaysLowered | yes/no | 指定窗口隐藏在所有窗口之后
alwaysRaised | yes/no | 指定窗口悬浮在所有窗口之上
depended | yes/no | 是否和父窗口同时关闭
directories | yes/no | Nav2和3的目录栏是否可见
height | pixel value | 窗口高度
hotkeys | yes/no | 在没菜单栏的窗口中设安全退出热键
innerHeight | pixel value | 窗口中文档的像素高度
innerWidth | pixel value | 窗口中文档的像素宽度
location | yes/no | 位置栏是否可见
menubar | yes/no | 菜单栏是否可见
outerHeight | pixel value | 设定窗口(包括装饰边框)的像素高度
outerWidth | pixel value | 设定窗口(包括装饰边框)的像素宽度
resizable | yes/no | 窗口大小是否可调整
screenX | pixel value | 窗口距屏幕左边界的像素长度
screenY | pixel value | 窗口距屏幕上边界的像素长度
scrollbars | yes/no | 窗口是否可有滚动栏
titlebar | yes/no | 窗口题目栏是否可见
toolbar | yes/no | 窗口工具栏是否可见
Width | pixel value | 窗口的像素宽度
z-look | yes/no | 窗口被激活后是否浮在其它窗口之上

阅读全文 ->