[ Content | Sidebar ]

Archives for 十二月, 2008

有用的js code:非ie浏览器的mouseleave实现

寻找实现mouseleave的简单方法~
————————-
有bug~
————————-

在非ie浏览器(firefox,safari…)里,只要子元素触发了mouseout便会冒泡到父级元素,所以用js实现hover式的下拉菜单时就需要hack一下了~

下面的代码仅针对ff,safari等非ie内核浏览器~

<script>
(function()
{
    function ismouseleave( event , element )
    {
    	var p = event.relatedTarget;
		while ( p && p != element ) try { p = p.parentNode; } catch( error ) { p = element; }
		return p !== element;
    }
 
    var onmouseleave = {};
 
    addEvent = function( element , name , func , useCapture )
    {
        if ( name == 'mouseleave' )
        {
            onmouseleave[ func ] = onmouseleave[ func ] || function( e )
            {
                if ( ismouseleave( e , element ) ) func.call( element , e );
            };
            element.addEventListener( 'mouseout' , onmouseleave[ func ] , useCapture );
            return element;
        }
		element.addEventListener( name , func , useCapture );
		return element;
    };
 
    delEvent = function( element , name , func ,useCapture )
    {
        if ( name == 'mouseleave' )
        {
            element.removeEventListener( 'mouseout' , onmouseleave[ func ] , useCapture );
            return element;
        }
        element.removeEventListener( name , func , useCapture );
        return element;        
    };
})();
</script>
<html>
    <body>
        <div id="test" line="0" run="1" >
            leave me
            <span style="background:#000;color:#fff;">
            leave me
            </span>
            leave me
        </div>
    </body>
</html>
<script>
    addEvent( document.getElementById('test') , 'mouseleave' , function()
    {
        alert( 'mouse leave!' );
        delEvent( this , 'mouseleave', arguments.callee );
    });
</script>
Copy Code | Run Code

换用vim

在aptana崩溃了几次之后,偶决定换个稳定又容易上手的编辑器-vim

嗯嗯,用了两天,感觉灰常强大,绝对是懒人利器~

加了几个简单的自定义命令:

快速TortoiseSVN命令

"使用这几个快捷命令的前提是win的环境变量的path包含了TortoiseSVN的bin目录
 
"diff
command -nargs=0 Svndiff :call Svndiff()
function Svndiff()
   silent execute '!TortoiseProc.exe /command:diff /path:' . expand('%:p')
endfunction
 
"commit
command -nargs=1 Svncommit :call Svncommit(<f-args>)
function Svncommit(msg)
   silent execute '!TortoiseProc.exe /command:commit /path:' . expand('%:p') . ' /logmsg:' . iconv(a:msg, &enc, "chinese")
endfunction
 
"update
command -nargs=0 Svnupdate :call Svnupdate()
function Svnupdate()
   silent execute '!TortoiseProc.exe /command:update /path:' . expand('%:p')
endfunction
 
command -nargs=0 Svnlog :call Svnlog()
function Svnlog()
   silent execute '!TortoiseProc.exe /command:log /path:' . expand('%:p')
endfunction
Copy Code 

由于编辑的文件一般都在同一个目录,所以加了一个速得函数

command -nargs=1 Get :call Get(<f-args>)
function Get(f)
   exe ':tabnew d:\xxxx\xxx\xxx\' . a:f
endfunction
Copy Code 

恩,继续学习