﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-sunfruit[请访问http://www.fruitres.cn]-随笔分类-JAVASCRIPT</title><link>http://www.blogjava.net/sunfruit/category/7558.html</link><description>--我相信JAVA能走得更远 QQ:316228067</description><language>zh-cn</language><lastBuildDate>Sun, 23 Mar 2008 09:10:52 GMT</lastBuildDate><pubDate>Sun, 23 Mar 2008 09:10:52 GMT</pubDate><ttl>60</ttl><item><title>Swift GIS--稳定、自主、高效</title><link>http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Fri, 21 Mar 2008 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/187758.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/187758.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/187758.html</trackback:ping><description><![CDATA[<script src="http://221.122.41.10/rmcomserver/ltmap/ltmap.js"></script><script type="text/javascript">
        var initMap;
        var mapListener = new MapListener();
        mapListener.onClick = function(geoPoint){
            //业务
            //pointId, geoPoint, color, size, opacity, caption, captionFontColor, captionBgColor, captionOpacity){
            var p = new Point(1, geoPoint, '#0000ff', 10, .6, '测试点', '#000000', '#FFFF00', .6);
            initMap.addPoint(p);
        }
            
        mapListener.onMouseMove = function(geoPoint){
            window.status = "lon="+geoPoint.x+"; lat="+geoPoint.y;
        }
        
        function win_load(){
            initMap = new initMap('map', '221.122.41.10', '80'); 
            initMap.addPanZoomBar(5, 5);
            //initMap.addOverviewMap();
            //*****初始化地图控制面板*****
            initMap.addControlPanel(60, 20);
            
            initMap.controlPanel.all[0].onclick = function(){initMap.drag();};
            initMap.controlPanel.all[1].onclick = function(){initMap.zoomIn();};
            initMap.controlPanel.all[2].onclick = function(){initMap.zoomOut();};           
            initMap.controlPanel.all[3].onclick = function(){initMap.getDistance();};           
            initMap.controlPanel.all[4].onclick = function(){initMap.onPoint('onPoint1');};         
            initMap.controlPanel.all[5].onclick = function(){initMap.onRect('onRect1');};
            initMap.controlPanel.style.width = '370px';
            //*************************
        }
        function onPoint1(geoPoint){
            var p = new Point(1, geoPoint, '#0000ff', 10, 1, '测试点', '#000000', '#FFFF00', .6);
            initMap.addPoint(p);
        }
        function onRect1(geoRect){
            var rectArea = new RectArea(1, geoRect, '#00ff00', 0.5, '#0000ff', 1);
            initMap.addRect(rectArea);
        }
        function win_unload(){
            initMap.listenerAgent.removeListener(mapListener);
        }
        //点操作
        function addPoint(){
            var lon = OpenLayers.Util.getElement('addPointLon').value;
            var lat = OpenLayers.Util.getElement('addPointLat').value;
            var geoPoint = new GeoPoint(parseFloat(lon), parseFloat(lat));
            var p = new Point(1, geoPoint, '#0000ff', 10, 1, '中文中文中文中文', '#FFFF00', '#00FF00', 1);
            initMap.addPoint(p);
        }
        function deletePoint(){
            initMap.deletePoint(1);
        }
        function clearPoint(){
            initMap.clearPoint();
        }
        //线操作
        function addLine(){
            var str = OpenLayers.Util.getElement('addPolygonPoints').value;
            
            var pointArr = str.split(",");
            var points = new Array();
            for(var i = 0; i < pointArr.length; i+=2){
                points.push(new GeoPoint(parseFloat(pointArr[i]), parseFloat(pointArr[i+1])));
            }
            
            var line = new Line(1, points, '#000000', 4, 1);
            initMap.addLine(line);
        }
        function deleteLine(){
            initMap.deleteLine(1);
        }
        function clearLine(){
            initMap.clearLine();
        }
        //圆形操作
        var regularPolygonFeature;
        function addCircle(){
            lon = OpenLayers.Util.getElement('addCircleLon').value;
            lat = OpenLayers.Util.getElement('addCircleLat').value;
            radius = OpenLayers.Util.getElement('addPointRadius').value;
            
            var geoCircle = new GeoCircle(parseFloat(lon), parseFloat(lat), parseFloat(radius));
            var circleArea = new CircleArea(1, geoCircle, '#00ff00', 0.5, '#0000ff', 1);
            //alert(circleArea);
            initMap.addCircle(circleArea);          
        }
        function deleteCircle(){
            initMap.deleteCircle(1);
        }
        function clearCircle(){
            initMap.clearCircle();
        }
        //矩形操作
        function addRect(){
            var left = OpenLayers.Util.getElement('addRectLeft').value;
            var top = OpenLayers.Util.getElement('addRectTop').value;
            var right = OpenLayers.Util.getElement('addRectRight').value;
            var bottom = OpenLayers.Util.getElement('addRectBottom').value;
            
            if(left != null && left != '' && top != null && top != '' && right != null && right != '' && bottom != null && bottom != ''){
                var geoRect = new GeoRect(parseFloat(left), parseFloat(top), parseFloat(right), parseFloat(bottom));
                var rectArea = new RectArea(1, geoRect, '#00ff00', 0.5, '#0000ff', 1);
                initMap.addRect(rectArea);
            }
        }
        
        function deleteRect(){
            initMap.deleteRect(1);
        }
        function clearRect(){
            initMap.clearRect();
        }
        //多边形
        function addPolygon(){
            var str = OpenLayers.Util.getElement('addPolygonPoints').value;
            if(str != null && str != ''){
                var pointArr = str.split(",");
                var nPoints = new Array();
                for(var i = 0; i < pointArr.length; i+=2){
                    nPoints.push(new OpenLayers.Geometry.Point(parseFloat(pointArr[i]), parseFloat(pointArr[i+1])));
                }
                var polygonArea = new PolygonArea(1, nPoints, '#0000ff', 0.1, '#0000ff', 2);
                initMap.addPolygon(polygonArea);
            }
        }
        function deletePolygon(){
            initMap.deletePolygon(1);
        }
        function clearPolygon(){
            initMap.clearPolygon();
        }
        //标记和弹出窗口
        function addMarker(){
            var str = OpenLayers.Util.getElement('popupPosition').value;
            var pointArr = str.split(",");
            var marker = new Marker(1, new GeoPoint(parseFloat(pointArr[0])-.2, parseFloat(pointArr[1])), 
                'img/zoom-world-mini.png', 30, 30, 
                '<center><a href="http://www.baidu.com" target="_blank">百度</a></center>', '测试POI1', '#000000', '#DDD', .8, false);
            initMap.addMarker(marker);
            
            var marker2 = new Marker(2, new GeoPoint(parseFloat(pointArr[0]), parseFloat(pointArr[1])), 
                'img/zoom-world-mini.png', 30, 30, 
                '<center><a href="http://www.baidu.com" target="_blank">百度</a></center>', '测试POI2', '#000000', '#DDD', .8, true);
            initMap.addMarker(marker2);
            
            var marker3 = new Marker(3, new GeoPoint(parseFloat(pointArr[0])+.2, parseFloat(pointArr[1])), 
                'img/zoom-world-mini.png', 30, 30, 
                '', '测试POI3', '#000000', '#DDD', .8, true);
            initMap.addMarker(marker3);
        }
        
        function deleteMarker(){
            initMap.deleteMarker(1);
        }
        function clearMarker(){
            initMap.clearMarker();
        }
        //弹出窗口
        function addPopup(){
            var str = OpenLayers.Util.getElement('popupPosition').value;
            if(str != null && str != ''){
                var pointArr = str.split(",");
                var p = new GeoPoint(parseFloat(pointArr[0]), parseFloat(pointArr[1]));
                var popup = new Popup(1, p, .9, '<center>北京灵图技术有限公司</center><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><center>灵图</center>', 272, 170 , true);                         
                initMap.addPopup(popup);
            }
        }
        function deletePopup(){
            initMap.deletePopup(1);
        }
        function clearPopup(){
            initMap.clearPopup();
        }
       
        function addScale(){
            initMap.addScale();
        }
        function getScale(){
            var obj = OpenLayers.Util.getElement('scaleId');
            obj.value = initMap.getScale();
        }
        function removeScale(){
            initMap.removeScale();
        }
        function addPanZoomBar(){
            initMap.addPanZoomBar(5, 5);
        }
        function removePanZoomBar(){
            initMap.removePanZoomBar();
        }
        function addListener(){
            initMap.listenerAgent.addListener(mapListener);
        }
        function removeListener(){
            initMap.listenerAgent.removeListener(mapListener);
        }
        
        function setCenter() {
            var center = new GeoPoint(106.5220,29.5616);
            initMap.setCenter(center);
        }
        function getCenter(){ alert(initMap.getCenter()); }
        function addSelectFeature(){ initMap.addSelectFeature(); }
        function zoomOut(){ initMap.zoomOut(); }
        function drag(){ initMap.drag(); }
        function addLonLat(){ initMap.addLonLat(); }
        function setMapByRect(){ 
            geoRect = new GeoRect(106.4253,29.5725,106.6100,29.4756);
            initMap.setMapByRect(geoRect);
        }
        function setMapByPoints(){
            var str = OpenLayers.Util.getElement('addPolygonPoints').value;
            if(str != null && str != ''){
                var pointArr = str.split(",");
                var nPoints = new Array();
                for(var i = 0; i < pointArr.length; i+=2){
                    nPoints.push(new OpenLayers.Geometry.Point(parseFloat(pointArr[i]), parseFloat(pointArr[i+1])));
                }
                initMap.setMapByPoints(nPoints);
            }   
        }
        var floatPopup, floatPopup1, floatPopup2;
        function addFloatPopup(){
            var jsContent = "<strong>第一个弹出窗口内容</strong><br /><center><input type=\"button\" value=\"弹出第二个窗口\" onclick=\"test1()\" /></center>";
            floatPopup = new creatPopup('aaa', 200, 230, 244, 386, '第一个窗口', jsContent);
            //alert(floatPopup);
        }
         function addFloatPopup1(){
            var jsContent = "<strong>第一个弹出窗口内容</strong>";
            creatPopup('aaa', 400, 430, 244, 386, '测试窗口', jsContent);
        }
        function test1(){
            creatPopup('bbb', 100, 130, 440, 250, '第二个窗口', '<center>内容</center>');
        }
        
        function closePopup_LP(id){
            closeFloatPopup(id);
        }
        
        function zoomIn(){
            initMap.zoomIn();
        }
        function zoomOut(){
            initMap.zoomOut();
        }
        function getDistance() {
            initMap.getDistance();
        }
        /*********需要回调的函数**********/
        function clearRect(){
            initMap.clearRect();
        }
        function eventAgent(evt) {
            initMap.eventAgent(evt);
        }
        /*******************************/
    </script>
<div style="border-right: black 1px solid; border-top: black 1px solid; border-left: black 1px solid; width: 640px; border-bottom: black 1px solid; height: 480px">
<div id="map" style="width: 100%; height: 100%"></div>
</div>
<form action="" method="post">
    <!--   <input type="text" value="" name="loggers" size="100" /> --><!--<input type=button value='清除' onclick='document.getElementById("loggers").value=""'/ /><br/ />
    <textarea rows="5" cols="150" id="loggers"></textarea>
 -->
    <table width="1024" border="1">
        <tbody>
            <tr>
                <td width="152">地图操作</td>
                <td colspan="2"><input onclick="initMap.drag();" type="button" value="移动" name="drag" /> <input onclick="initMap.zoomIn()" type="button" value="放大" name="zoomIn" /> <input onclick="initMap.zoomOut()" type="button" value="缩小" name="zoomOut" />&nbsp;&nbsp;&nbsp; <input onclick="initMap.getDistance()" type="button" value="测距" name="line" /> <input onclick="initMap.getArea()" type="button" value="测面" name="polygon" />&nbsp;&nbsp;&nbsp; <input onclick="setCenter()" type="button" value="设中心" name="" /> <input onclick="getCenter()" type="button" value="取中心" name="" />&nbsp;&nbsp;&nbsp; <input onclick="setMapByRect()" type="button" value="设置地图(rect)" name="" /> <input onclick="setMapByPoints()" type="button" value="设置地图(points)" name="" /> </td>
            </tr>
            <tr>
                <td width="152">点、线</td>
                <td colspan="2"><input value="106.5220" name="addPointLon"  type="text" /> <input value="29.5616" name="addPointLat"  type="text" /> <input onclick="addPoint()" type="button" value="加点" /> <input onclick="deletePoint()" type="button" value="删点" /> <input onclick="clearPoint()" type="button" value="清点" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input onclick="addLine()" type="button" value="加线" name="" /> <input onclick="deleteLine()" type="button" value="删线" name="" /> <input onclick="clearLine()" type="button" value="清线" name="" /> </td>
            </tr>
            <tr>
                <td rowspan="3">多边形</td>
                <td>圆</td>
                <td>中心 <input size="12" value="106.5220" name="addCircleLon"  type="text" /> <input size="12" value="29.5616" name="addCircleLat"  type="text" /> 半径 <input id="addPointRedius" size="12" value="0.09" name="addPointRadius"  type="text" /> <input onclick="addCircle()" type="button" value="加圆" name="" /> <input onclick="deleteCircle()" type="button" value="删圆" name="" /> <input onclick="clearCircle()" type="button" value="清圆" name="" /></td>
            </tr>
            <tr>
                <td>矩形</td>
                <td>左上 <input id="addRectLeft" size="12" value="106.4253" name="addRectLeft"  type="text" /> <input id="addRectTop" size="12" value="29.5725" name="addRectTop"  type="text" /> 右下 <input id="addRectRight" size="12" value="106.6100" name="addRectRight"  type="text" /> <input id="addRectBottom" size="12" value="29.4756" name="addRectBottom"  type="text" /> <input onclick="addRect()" type="button" value="加矩形" name="" /> <input onclick="deleteRect()" type="button" value="删矩形" name="" /> <input onclick="clearRect()" type="button" value="清矩形" name="" /></td>
            </tr>
            <tr>
                <td width="62">多边形</td>
                <td width="788"><input id="addPolygonPoints" size="68" value="106.5220,29.5616,106.4253,29.5725,106.5726,29.616" name="addPolygonPoints"  type="text" /> <input onclick="addPolygon()" type="button" value="加多边形" name="" /> <input onclick="deletePolygon()" type="button" value="删多边形" name="" /> <input onclick="clearPolygon()" type="button" value="清多边形" name="" /> </td>
            </tr>
            <tr>
                <td width="152">标记(marker)</td>
                <td colspan="2"><input onclick="addMarker()" type="button" value="加标记" name="" /> <input onclick="deleteMarker()" type="button" value="删标记" name="" /> <input onclick="clearMarker()" type="button" value="清标记" name="" />&nbsp;&nbsp;&nbsp;&nbsp; <input id="popupPosition" value="106.4230,29.5616" name="popupPosition"  type="text" /> <input onclick="addPopup()" type="button" value="加弹出窗口" name="" /> <input onclick="deletePopup()" type="button" value="删弹出窗口" name="" /> <input onclick="clearPopup()" type="button" value="清弹出窗口" name="" />&nbsp;&nbsp;&nbsp;&nbsp; </td>
            </tr>
            <tr>
                <td width="152">滑动条(PanZoomBar)</td>
                <td colspan="2"><input onclick="addPanZoomBar()" type="button" value="添滑动条" name="" /> <input onclick="removePanZoomBar()" type="button" value="删滑动条" name="" />&nbsp;&nbsp; <input onclick="addLonLat()" type="button" value="添经纬度" name="" />&nbsp;&nbsp; <input onclick="initMap.addOverviewMap()" type="button" value="添鹰眼" name="" /> <input onclick="initMap.deleteOverviewMap()" type="button" value="删鹰眼" name="" /> </td>
            </tr>
            <tr>
                <td width="152">比例尺(scale)</td>
                <td colspan="2"><input id="scaleId" name="scaleId"  type="text" /> <input onclick="getScale()" type="button" value="取比例尺" name="" /> <input onclick="addScale()" type="button" value="添比例尺" name="" /> <input onclick="removeScale()" type="button" value="删比例尺" name="" /> </td>
            </tr>
            <tr>
                <td width="152">地图属性</td>
                <td colspan="2"><input onclick="alert(initMap.getViewSize());" type="button" value="窗口大小" name="" /> <input onclick="alert(initMap.getMapSize());" type="button" value="地图大小" name="" /> </td>
            </tr>
            <tr>
                <td width="152">事件</td>
                <td colspan="2"><input onclick="initMap.drag();addListener()" type="button" value="添加监听" name="" /> <input onclick="removeListener()" type="button" value="删除监听" name="" />&nbsp;&nbsp;&nbsp;&nbsp; <input onclick="initMap.onRect('onRect1')" type="button" value="画框" name="" />&nbsp;&nbsp;&nbsp;&nbsp; <input onclick="initMap.onPoint('onPoint1')" type="button" value="点选" name="" /> </td>
            </tr>
            <tr>
                <td width="152">其它</td>
                <td colspan="2"><input onclick="addFloatPopup()" type="button" value="浮动窗口A" name="" /> <input onclick="addFloatPopup1()" type="button" value="浮动窗口B" name="" /> <input onclick="closePopup_LP('aaa')" type="button" value="关闭窗口A" name="" /> <input onclick="closePopup_LP('bbb')" type="button" value="关闭窗口B" name="" /> </td>
            </tr>
        </tbody>
    </table>
</form>
<script>
    //initMap.addOverviewMap();
    win_load();
</script>    <img src ="http://www.blogjava.net/sunfruit/aggbug/187758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2008-03-21 17:48 <a href="http://www.blogjava.net/sunfruit/archive/2008/03/21/187758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]Applet上叠加层的解决方案(非div)</title><link>http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sat, 29 Dec 2007 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/171555.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/171555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/171555.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; --sunfruit<br />
<br />
&nbsp;&nbsp;&nbsp; 在applet上叠加层有2种方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;第一：使用iframe的方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;第二：使用window.createPopup();方式<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;div&gt;&lt;/div&gt;的方式我是没有试成功，无论如何设置，div都在applet的下面，要是哪位实验成功了，经验也共享一下<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;由于window.createPopup()主要用于创建右键菜单，由于其的一些特性，例如在其他地方点击,该window.createPopup()对象消失，所以叠加层方式使用window.createPopup()并不合适，使用iframe制作叠加层的效果更好更好<br />
<br />
&nbsp;&nbsp;&nbsp; 效果图如下<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="475" alt="" src="http://www.blogjava.net/images/blogjava_net/sunfruit/applet_div.JPG" width="637" border="1" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 演示：<a href="http://www.fruitres.cn/applet.jsp">http://www.fruitres.cn/applet.jsp</a>，可以从该演示页直接下载js代码，或者到代码下载页下载<br />
&nbsp;&nbsp;&nbsp; 代码下载：<a href="http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1084563770&amp;number=0">http://www.fruitres.cn/servlet/buyproductservlet?tag=single&amp;tag1=info&amp;PRODUCT_ID=1084563770&amp;number=0</a>&nbsp;<br />
&nbsp;&nbsp;&nbsp; 更多下载：<a href="http://www.fruitres.cn/">http://www.fruitres.cn/</a> 
 <img src ="http://www.blogjava.net/sunfruit/aggbug/171555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2007-12-29 15:36 <a href="http://www.blogjava.net/sunfruit/archive/2007/12/29/171555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[资料]WEB开发利器--JAVASCRIPT API文档 HTML API 文档</title><link>http://www.blogjava.net/sunfruit/archive/2006/10/31/78311.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Tue, 31 Oct 2006 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/10/31/78311.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/78311.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/10/31/78311.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/78311.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/78311.html</trackback:ping><description><![CDATA[    --sunfruit<br />    有三个压缩包需要下载，下载以后放在同一个目录中解压即可<br />     <a href="/Files/sunfruit/dhtml.part1.rar">下载包1</a><br />     <a href="/Files/sunfruit/dhtml.part2.rar">下载包2</a><br />     <a href="/Files/sunfruit/dhtml.part3.rar">下载包3</a><img src ="http://www.blogjava.net/sunfruit/aggbug/78311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-10-31 16:37 <a href="http://www.blogjava.net/sunfruit/archive/2006/10/31/78311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]JavaScript面向对象的特性</title><link>http://www.blogjava.net/sunfruit/archive/2006/08/30/66567.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Wed, 30 Aug 2006 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/08/30/66567.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/66567.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/08/30/66567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/66567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/66567.html</trackback:ping><description><![CDATA[如果你使用JavaScript编程，你或许会怀疑它是否包含了面向对象（OO）的结构。实际上，JavaScript的确支持面向对象的架构――在某种程度上。本文将通过一个可扩展向量图形（SVG）的实例来说明JavaScript的OO结构。 
<p></p><p>我如何在类中定义方法和属性？</p><p></p><p>OO开发的一个基本方面是类及其相应的方法和／或属性的使用。JavaScript通过function关键字支持类（及其属性）的使用。下面的代码定义了一个叫做Figure的JavaScript类：<br />function Figure() {<br />this.centerX=0;<br />this.centerY=0;<br />this.area=0;<br />this.transform = transform; // methods are defined like this<br />function transform(moveX,moveY,angle) {<br />this.centerX += moveX;<br />this.centerY += moveY;<br />} }</p><p>这个Figure类有三个属性：centerX，centerY，和area。另外，它还有一个方法叫做transform()。前三行是这个类的构造器。<br />但是它看起来不像一个类<br />你会想Figure()看起来不像一个类，而更像一个JavaScript的函数。那么为什么Figure()定义的是个类？ </p><p>严格的说，Figure()函数没有定义一个类，但是它仿造了一个。它实际上创建了一个对象，在括号里的代码使这个对象的构造器。JavaScript的对象支持是很基础的，它并不区分类和对象。<br />这就引到了问题为什么Figure()函数创建的是一个对象。对象是可以有属性和方法的。基本上，因为Figure()函数同时包含了属性和方法，它就是个对象。在JavaScript里，所有的函数即是对象又是可调用的代码块。这不像它听起来的那样容易被误解。要创建一个Figure()类／对象，你只用使用以下句法：<br />MyFigure = new Figure();<br />你也可以把Figure()函数当作代码块调用，就像这样：<br />figValue = Figure();<br />变量figValue没有被定义是因为代码块Figure()没有返回任何值。如果你把return(this.area)加到函数的最后一行，figValue就会有个值0。所以figValue是个类型数字，MyFigure是对象 Rectangle的实例。<br />为什么所有的变量前面都一个“this”？</p><p>这个关键字this表示这是对象的实例变量，可以使用MyFigure.centerX从对象外部访问。要让变量成为私有变量，去掉前缀this就行了。this.transform = transform这一行让方法成为公用方法。这个方法通过MyFigure.transform(100,100,0)调用。</p>这些类有层次之分吗？ 
<p>另一个好问题的是JavaScript的类是否有层次之分。回答是肯定有。我们来仔细看看是怎么做到分层的。我们可以定义一个Rectangle子类，并把Figure作为父类： </p><p>function Rectangle(startX, startY, endX, endY) {<br />this.width = endX - startX;<br />this.height = endY - startY;<br />this.centerX = (endX + startX)/2;<br />this.centerY = (endY + startY)/2;<br />this.computeArea = computeArea;<br />function computeArea() {<br />this.area = this.width*this.height;<br />} }<br />Rectangle.prototype = new Figure();</p><p>Rectangle对象是用4个自变量创建的，前四行是构造器。 Rectangle类包含了一个方法： computeArea()。最后一行Rectangle.prototype = new Figure();，把Rectangle类定义为从Figure类继承来的子类。<br />然我来解释一下prototype（原型）。每个对象构造器都有prototype属性；这是用来给所有的对象增加新属性和方法的。这就是为什么原型被用来实现继承：child.prototype = new parent();。通过原型，父对象的所有属性和方法都被添加到子对象上。<br />要注意this.centerX，this.centerY，和area是Rectangle类中所使用的属性，但是它们是 Figure父类的属性。和Rectangle类相似，Circle类可以被定义成Figure类的原型。这种父子关系可以按你需要来定义深度；你可以创建另一个Rectangle的子类。<br />我如何创建一个类的实例？</p><p>在JavaScript里创建一个类的实例很容易：<br />rect = new Rectangle(100,100,900,800);<br />这就创建了Rectangle类型的一个对象。Rectangle的构造器在属性width, height, centerX, 和centerY中填入了值。rect.area属性的值是零（0）。使用这个命令就能调用area方法：<br />rect.computeArea();<br />rect.area的值现在是560,000。要调用transform方法使用：<br />rect.transform(100,200,0);</p><p>父和子对象的属性可以像这样访问到：<br />var ar = rect.area;<br />var wi = rect.width;</p><p>我能超越属性和方法吗？</p><p>就像你在Java中的一样，你可以超越属性和方法。在子类中定义的属性或者方法可以超越同名的父类的属性和方法。<br />和全局变量互动<br />JavaScript也支持全局变量的使用。在以下代码段中测试一下g_area变量的范围：<br />&lt;HTML&gt;<br />&lt;SCRIPT&gt;<br />var g_area = 20;<br />function Figure() {<br />…<br />this.area=g_area;<br />…<br />}<br />function Rectangle(){ … }<br />Rectangle.prototype = new Figure();<br />function test(){<br />g_area = 40;<br />rect = new Rectangle();<br />alert(rect.area);<br />}<br />&lt;/SCRIPT&gt;<br />&lt;BODY onLoad = 'test()'/&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;<br />rect.area的值是20（不是你预计的40），这是因为Rectangle对象是Figure对象的原型，这种关系在test()被调用以前就被定义了。要使用g_area的新值，你需要用以下的方法： </p><p>function test() {<br />g_area = 40;<br />Rectangle.prototype = new Figure();<br />rect = new Rectangle();<br />alert(rect.area);<br />}</p><p>对于所有的Rectangle的新实例，这将改变area属性的值。或者，你可以使用这种方法：function test() {<br />g_area = 40; <br />rect = new Rectangle();<br />Rectangle.prototype.area = g_area;<br />alert(rect.area);<br />}</p><p>这将改变Rectangle所有现存的以及新实例的area属性的值。<br />结论</p><p>为了效仿OO开发，JavaScript提供了必需的继承、封装和超越属性，尽管它不支持接口和方法的过载。如果你是刚接触到OO开发，用它试试。OO概念允许开发者将一组数据和相关操作集中入一个对象。这在管理浏览器事件和管理浏览器内SVG图时很有用。</p><img src ="http://www.blogjava.net/sunfruit/aggbug/66567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-08-30 09:37 <a href="http://www.blogjava.net/sunfruit/archive/2006/08/30/66567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[技巧]在JAVASCRIPT里面实现延时功能</title><link>http://www.blogjava.net/sunfruit/archive/2006/03/14/35223.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Tue, 14 Mar 2006 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/03/14/35223.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/35223.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/03/14/35223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/35223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/35223.html</trackback:ping><description><![CDATA[--sunfruit<BR><BR>我们有的时候需要在javascript里面实现延时功能，比如：当某一个按钮按下提交内容以后就马上把状态改为失效，过2秒钟以后再把状态改为有效，才可以进行下一次提交<BR><BR>这个过程就需要延时功能了，这里用到了javascript的setTimeout函数，这个函数的入口参数为2个，第一个参数是需要执行的内容，这个可以是一个URL，也可以是另一个javascript函数，第二个参数是延时的时间数单位是毫秒，下面举个例子<BR><BR>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<BR>&lt;title&gt;无标题文档&lt;/title&gt;<BR>&lt;script language="javascript"&gt;<BR>function r1()<BR>{<BR>&nbsp;setTimeout("r2()",2000);<BR>&nbsp;<BR>}<BR>function r2()<BR>{<BR>&nbsp;&nbsp;&nbsp; alert("OK");<BR>}<BR>&lt;/script&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;<BR>&nbsp;&lt;input name="uu" type="button" id="uu" value="按钮" onClick="r1();"&gt;<BR>&lt;form name="form1" method="post" action=""&gt;<BR>&lt;/form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR><BR>执行这个例子的效果是：按钮按下去以后2秒钟“OK”对话框弹出，呵呵用这个特性实现button的失效和有效就简单多了<BR><BR>这里有一个技巧，就是在页面body的onload属性里面加上setTimeout的执行方法，而且setTimeout方法的第一个参数为执行自身页面，这样的效果就是间隔一定时间刷新本页，也许有人问了，html的自身属性就提供定时刷新页面功能，jsp页面的head属性里面也有类似的功能，干嘛这么麻烦使用setTimeout方法<BR><BR>不知道大家注意了没有，不管是使用html的自身提供定时刷新页面功能还是jsp页面head属性里面类似的功能，都会有浏览器发出的“啪啪”的声音，而使用setTimeout则没有这样的声音，所以使用setTimeout方法还是很有用的<img src ="http://www.blogjava.net/sunfruit/aggbug/35223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-03-14 13:44 <a href="http://www.blogjava.net/sunfruit/archive/2006/03/14/35223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]JAVASCRIPT判断输入框中的内容全部为数字的不同方法分析</title><link>http://www.blogjava.net/sunfruit/archive/2006/02/19/31506.html</link><dc:creator>sunfruit</dc:creator><author>sunfruit</author><pubDate>Sun, 19 Feb 2006 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/sunfruit/archive/2006/02/19/31506.html</guid><wfw:comment>http://www.blogjava.net/sunfruit/comments/31506.html</wfw:comment><comments>http://www.blogjava.net/sunfruit/archive/2006/02/19/31506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunfruit/comments/commentRss/31506.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunfruit/services/trackbacks/31506.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; --sunfruit
<P>&nbsp;&nbsp;&nbsp; 分析了使用正则表达式和使用isNaN函数验证输入的内容是否全部为数字的区别</P>
<P>&nbsp;&nbsp;&nbsp; 1、使用正则表达式<BR>&nbsp;&nbsp;&nbsp; var patrn=/^[0-9]{1,20}$/;<BR>&nbsp;&nbsp;&nbsp; if(xxx!=null &amp;&amp; !patrn.exec(xxx))<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("请保证输入的全是数字");<BR>&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; 这个表达式要求输入的字符每一个都必须是数字,123是正确的而1.23不正确</P>
<P>&nbsp;&nbsp;&nbsp; 2、使用isNaN<BR>&nbsp;&nbsp;&nbsp; if (isNaN(xxx)) <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('请输入数字!');<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 这个表达式认为123,1.23,-1.23甚至是-.23都是正确的</P>
<P>&nbsp;&nbsp;&nbsp; 可以看出,使用正则表达式更适合验证输入内容必须为纯数字的情况,而使用isNaN对输入的内容要求更为宽松一些</P><img src ="http://www.blogjava.net/sunfruit/aggbug/31506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunfruit/" target="_blank">sunfruit</a> 2006-02-19 17:45 <a href="http://www.blogjava.net/sunfruit/archive/2006/02/19/31506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>