2014年3月27日星期四

[]二级JS下拉菜单(可轻松扩展成多级下拉菜单) - 网页特效代码 - 创想工作室

本文自动转发自我的博客: http://www.haofengjing.org/2578.html

花了一点时间把原来的代码做了一点修改,搞了一个简易版 JavaScript 下拉菜单。其实用 JS 实现下拉菜单比 CSS 简单多了,因为各个浏览器之间对 JS 支持的差异相比 CSS 来说要小一些,不需要花那么多心思用在对付浏览器上。如果 HTML 的结构良好,只需要很少的 JS 代码即可实现,而且可以实现多级下拉菜单的效果(我的示例中给出了二级下拉菜单,可以根据需要按照原来的 HTML 结构逐级添加)。

页面源代码:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">   
  2. <html xmlns="http://www.w3.org/1999/xhtml">   
  3. <head>   
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
  5.     <title>JavaScript下拉菜单</title>   
  6.     <style type="text/css">   
  7.         * {   
  8.             padding:0;    
  9.             margin:0;   
  10.         }   
  11.         body {   
  12.             font-family:verdana, sans-serif;    
  13.             font-size:small;   
  14.         }   
  15.         #navigation, #navigation li ul {   
  16.             list-style-type:none;   
  17.         }   
  18.         #navigation {   
  19.             margin:20px;   
  20.         }   
  21.         #navigation li {   
  22.             float:left;   
  23.             text-align:center;   
  24.             position:relative;   
  25.         }   
  26.         #navigation li a:link, #navigation li a:visited {   
  27.             display:block;    
  28.             text-decoration:none;    
  29.             color:#000;    
  30.             width:120px;    
  31.             height:40px;    
  32.             line-height:40px;    
  33.             border:1px solid #fff;    
  34.             border-width:1px 1px 0 0;    
  35.             background:#c5dbf2;    
  36.             padding-left:10px;    
  37.         }   
  38.         #navigation li a:hover {   
  39.             color:#fff;   
  40.             background:#2687eb;   
  41.         }   
  42.         #navigation li ul li a:hover {   
  43.             color:#fff;   
  44.             background:#6b839c;    
  45.         }   
  46.         #navigation li ul {   
  47.             display:none;   
  48.             position:absolute;    
  49.             top:40px;   
  50.             left:0;   
  51.             margin-top:1px;   
  52.             width:120px;   
  53.         }   
  54.         #navigation li ul li ul {   
  55.             display:none;   
  56.             position:absolute;    
  57.             top:0px;   
  58.             left:130px;    
  59.             margin-top:0;   
  60.             margin-left:1px;   
  61.             width:120px;   
  62.         }   
  63.     </style>   
  64.     <script type="text/javascript">   
  65.         function displaySubMenu(li) {   
  66.             var subMenu = li.getElementsByTagName("ul")[0];   
  67.             subMenu.style.display = "block";   
  68.         }   
  69.         function hideSubMenu(li) {   
  70.             var subMenu = li.getElementsByTagName("ul")[0];   
  71.             subMenu.style.display = "none";   
  72.         }   
  73.     </script>   
  74. </head>   
  75. <body>   
  76.     <ul id="navigation">   
  77.         <li onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)">   
  78.             <a href="#">栏目1</a>       
  79.             <ul>   
  80.                 <li><a href="#">栏目1->菜单1</a></li>   
  81.                 <li><a href="#">栏目1->菜单2</a></li>   
  82.                 <li><a href="#">栏目1->菜单3</a></li>   
  83.                 <li><a href="#">栏目1->菜单4</a></li>   
  84.             </ul>   
  85.         </li>   
  86.         <li onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)">   
  87.             <a href="#">栏目2</a>       
  88.             <ul>   
  89.                 <li><a href="#">栏目2->菜单1</a></li>   
  90.                 <li><a href="#">栏目2->菜单2</a></li>   
  91.                 <li><a href="#">栏目2->菜单3</a></li>   
  92.                 <li><a href="#">栏目2->菜单4</a></li>   
  93.                 <li><a href="#">栏目2->菜单5</a></li>   
  94.             </ul>   
  95.         </li>   
  96.         <li onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)">   
  97.             <a href="#">栏目3</a>       
  98.             <ul>   
  99.                 <li onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)">   
  100.                     <a href="#">栏目3->菜单1</a>   
  101.                     <ul>   
  102.                         <li><a href="#">菜单1->子菜单1</a></li>   
  103.                         <li><a href="#">菜单1->子菜单2</a></li>   
  104.                         <li><a href="#">菜单1->子菜单3</a></li>   
  105.                         <li><a href="#">菜单1->子菜单4</a></li>   
  106.                     </ul>   
  107.                 </li>   
  108.                 <li><a href="#">栏目3->菜单2</a></li>   
  109.                 <li onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)">   
  110.                     <a href="#">栏目3->菜单3</a>   
  111.                     <ul>   
  112.                         <li><a href="#">菜单3->子菜单1</a></li>   
  113.                         <li><a href="#">菜单3->子菜单2</a></li>   
  114.                         <li><a href="#">菜单3->子菜单3</a></li>   
  115.                     </ul>   
  116.                 </li>   
  117.             </ul>   
  118.         </li>   
  119.     </ul>   
  120. </body>   
  121. </html>


2014年3月25日星期二

[]Go语言知识积累:windows开发环境搭建 - 51CTO.COM

本文自动转发自我的博客: http://www.haofengjing.org/2572.html

特点简介:

1.引入轻量级线程——协程(coroutine),Go语言中叫goroutine。

2.采用Erlang风格的并发模型,即消息是进程间唯一的通信方式(而非共享内存)。两个goroutine之间通信通过channel(通道)进行。

3.对代码风格进行了强制统一,比如public变量必须以大写字母开头,private变量必须以小写字母开头,从而省略了这两个关键字。{}中{的书写不能另起一行等。

4.defer关键字,不管程序是否异常,均在退出时执行的代码。避免了大量try、catch语句。

5.函数允许返回多个值,且最后一个值问error类型,用于在错误的情况下返回详细信息。

6.反对(不提供)函数和操作符的重载,不提供继承、虚函数、虚函数重载。但是提供组合,也达到继承的目的。

7.没有构造函数和析构函数 ,提供接口,与其他语言最大的区别在于接口是非侵入性的。即实现类无需从接口派生

8.支持匿名函数与闭包。

...继续研究中

Windows下,开发环境的搭建:

IDE有两种选择,一个是国人开发的liteIDE,一个是给eclipse下载goclipse插件。但是由于未知原因,我没有调好eclipse中基于gocode的Go语言自动补齐功能。所以我选择了liteIDE,下面介绍如何搭建liteIDE环境,eclipse的方法大家自己探索吧。欢迎分享经验。

1.下载Go语言安装包,进入下面的链接,选择适合自己的安装包进行下载(我用的go1.0.3.windows-386.msi),然后安装即可,记录下安装后的根目录以备配置使用。

下载地址:https://code.google.com/p/go/downloads/list

2.下载liteIDE,进入下面的链接,选择适合自己的安装包(我用的liteidex17.windows-webkit.7z),下载完成后解压到任意目录,然后进入根目录下的bin文件夹,双击liteide.exe即可打开软件。

下载地址:https://code.google.com/p/golangide/downloads/list

软件界面如下:

3.配置liteIDE的信息,第一次打开此IDE时,需要配置相关信息,才能正确使用。点击【查看】→【选项】,打开了选项页面后在列表中选择LiteEnv,如图所示:

4.针对你的系统,修改对应的文件。我是32位系统,所以需要修改win32-user.env和win32.env。修改内容如下:

  1. #nativecompilerwindows386 
  2. GOROOT=E:\go 
  3. GOBIN=E:\go\bin 
  4. GOARCH=386 
  5. GOOS=windows 
  6. CGO_ENABLED=1 
  7. PATH=%GOBIN%;%GOROOT%\bin;%PATH% 
  8. LITEIDE_GDB=gdb 
  9. LITEIDE_MAKE=mingw32-make 
  10. LITEIDE_TERM=%COMSPEC% 
  11. LITEIDE_TERMARGS
  12. LITEIDE_EXEC=%COMSPEC% 
  13. LITEIDE_EXECOPT=/C 

其中GOROOT和GOBIN都是根据之前Go语言安装时选定的目录进行配置的。我安装Go语言时选择的路径是E:\Go

5.配置GOPATH,点击【查看】→【设置GOPATH】,在打开的窗口中的自定义GOPATH处点击浏览,选中你以后想存放Go工程的文件夹,添加后选择ok。如图所示:

6.关闭IDE,重新打开后,在点击【查看】→【工具窗口】→【Package浏览】,打开了Package浏览后,如果能看到Go的目录,则可以使用了。

怀着对先人的尊敬,我们来个HelloWorld之旅~

选择起始页的新建,在模板处选择Go1 Command Project,起个名字,点击ok。则自动生成了HelloWorld程序~

点击编辑窗口上部的BR按钮,即可运行程序,并在编译输出窗口得到输出。

恩,现在就探索到这个阶段。在Eclipse中装goclipse插件遇到种种问题,虽然最后成功安装,但是没有自动补齐功能。所以放弃了~

附一张liteIDE的自动补齐功能截图:

欢迎各路Go大神赐教~

PS: 我存在过,我遇见过,我失败过。 有些路,明明有坑却从没人放警示牌。有些事,明明是错的却没人去管。有些话,明明应该告诉后来人却没人去说。 既然没人做,那就我来吧。希望我曾经历过的挫折不再重现于后来人。希望传承能够不是只挂在嘴边。希望人模人样的"人"能够真正做人。

原文链接:http://www.cnblogs.com/FlameRen/archive/2013/04/08/3007155.html

 

[]Go语言学习笔记(一) : 搭建Windows下的Go开发环境 » Soul Apogee

本文自动转发自我的博客: http://www.haofengjing.org/2570.html

原创文章,转载请注明:转载自Soul Apogee 本文链接地址:Go语言学习笔记(一) : 搭建Windows下的Go开发环境

最近突然对Go语言产生了兴趣,主要是因为在使用python的时候遇到了一些不爽的问题,然后发现了Go。Go是Google出的一个动态语言,语法和C++接近性能也非常的好,而且还支持编译成exe发布,并且不依赖任何虚拟机(其实是打包在exe里面了),这种好语言怎么能够错过?所以便一时兴起,开始学习了起来。由于本人还处于异常小白的阶段,所以文章中可能不免有些错误,欢迎大家各种指正。

安装Go

前往Go语言的官方网站:http://golang.org/,下载对应平台的安装包。如果是x86的系统可以就下载i386的,如果是x64的系统,那么就安装amd64的就可以了。另外Go语言在Windows下的的安装包有两种:msi和zip的。zip的是免安装的,解压在配置一些环境变量之后就可以使用,msi的则是安装包版本的,安装的时候会设置好对应的环境变量。为了方便,我就下了x64上的msi安装包:go1.1.2.windows-amd64.msi。下好安装包后,安装过程就很简单了,下一步到底就好了。 虽然msi会自动配置一些环境变量,但是本人在安装完之后还是遇到了部分环境变量丢失的情况,所以在安装完Go之后,我们最后还是检查一些所有的环境变量是否正常。主要的环境变量有以下几个:

  • GOROOT:Go的安装目录
  • GOPATH:用于存放Go语言Package的目录,这个目录不能在Go的安装目录中
  • GOBIN:Go二进制文件存放目录,写成%GOROOT%\bin就好
  • GOOS:操作系统
  • GOARCH:指定系统环境,i386表示x86,amd64表示x64
  • PATH:需要将%GOBIN%加在PATH变量的最后,方便在命令行下运行Go
  • 我们还可以使用go env来查看所有其他的环境变量的定义 go-env

当环境变量都配置正常之后,Go就已经安装完毕了。现在打开命令行,运行go,大家应该就可以看到如下的提示了。

Hello Go!

现在就让我们一起来Hello World吧!

1
2
3
4
5
package main
import "fmt"
func main() {
    fmt.Println("Hello, World!")
}

将上面的程序保存成hello.go,然后在命令行中执行:

1
go run hello.go

Tada!结果就出来了! go-run

而且Go语言还可以将go程序直接编译成exe,再发布出去,相比python更为方便(需要使用py2exe),只需要在命令行中运行:

1
go build hello.go

就可以看到并执行编译好的exe了。 go-build

另外,我们还可以看到,这个hello.exe居然有1.5M之多,这个应该是因为go把整个虚拟机都打包到了exe里面的缘故,从exe的依赖上来看,他对go已经完全没有依赖了,只有几个系统的dll了。 hello-dependency

IDE

关于IDE每个人的喜好都不同,你可以使用较为独立的开发环境LiteIDE,也可以是VS或者Eclipse,甚至是notepad++,当然更不用说vim和emacs了。在这里,介绍两种比较常见的IDE:LiteIDE和Eclipse。

LiteIDE

LiteIDE算是集成的非常好Go IDE了,编译,调试,代码补全,功能可谓应有尽有。而且免费,开源,基于QT所以还跨平台。其安装异常简单,从官网(https://code.google.com/p/liteide/)上下载对应平台的安装包,然后解压到指定目录即可。 liteide

Eclipse + GoClipse

Eclipse是非常著名的IDE了,所以具体要怎么安装,我就不太多说了,简单介绍一下过程。

  1. http://java.com/上下载并装好最新的JRE
  2. http://www.eclipse.org/上下载最新的Eclipse,解压即可

刚下载下来的Eclipse是不支持Go的,为了让其支持Go语言,我们需要安装一个插件:GoClipse。 项目地址:https://code.google.com/p/goclipse/

安装过程十分简单,只需要在Eclipse中添加一个源:http://goclipse.googlecode.com/svn/trunk/goclipse-update-site/,然后选中GoClipse,安装即可,如下图。 eclipse-install-goclipse

安装完之后,重启Eclipse,我们便可以使用Eclipse来编写Go语言的程序了。

GoCode

使用GoClipse写代码的时候,我们会发现其没有代码补全,为了增加代码补全,我们需要安装gocode。LiteIDE就不需要了,因为其已经内置了gocode。

GoCode是host在github上,使用go写的用来做go语言代码补全的工程,项目地址是:https://github.com/nsf/gocode,里面有非常详细的安装方法。由于go内置了和包管理器类似的工具,所以安装方式也就很简单了。

  1. 安装git:由于安装过程中由于需要用到git,所以需要先安装msysgit或者cygwin,如果你觉得这样很麻烦,有一个更为简单的方法:安装github for windows:http://windows.github.com/
  2. 启动git shell,并运行:go get -u -ldflags -H=windowsgui github.com/nsf/gocode。
  3. 现在到%GOBIN%目录下看一下,就会发现有gocode.exe了。

接下来就需要配置一下Eclipse。打开Windows->Preferences,找到Go->Gocode标签,设置好gocode.exe的路径即可。 goclipse-set-gocode

完成,现在好好写代码吧。 eclipse-goclipse