<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhyiwww
    用平實的筆,記錄編程路上的點點滴滴………
    posts - 536,comments - 394,trackbacks - 0
    /*********************************************************
    ?* @author ??? ??? ??? zhangyi
    ?* @email? ??? ??? ??? zhyiwww@163.com
    ?* @date ??? ??? ??? ? 2007-4-2
    ?*
    ?* 轉載請注明出處 http://www.tkk7.com/zhyiwww
    ?* @copyright ??? ???? zhangyi
    ?*********************************************************/


    這個功能,我花了好幾天的時間才實現,主要是在拉框的時候,我可以實現,但是,我想在松開鼠標的時候,進行自己的業務處理,但是,怎么也不能響應鼠標的mouseup事件,也看了不少的例子,都是只有拉框,在移動事件里面可以實現功能,但是,鼠標的抬起事件不能響應。有的,可以相應事件,但是要鼠標在多點一下,后來就找了好多的資料,了解了事件的處理,才把這個問題搞定。
    現在把代碼重新整理了一下,希望對大家能有所幫助。

    <html>
    ?? ?<head>
    ?? ??? ?<meta http-equiv="content-type" content="text/html; charset=gbk">
    ?? ??? ?<title>拉框</title>
    ?? ?</head>
    ?? ?<body>
    ?? ??? ?<div id='lay1'
    ?? ??? ??? ?onmousedown='down(event)'
    ?? ??? ??? ?onmouseup='up(event)'
    ?? ??? ??? ?onmousemove='move(event)'
    ?? ??? ??? ?style='top:30px;left:30px;width:400px;height:400px;visibility:visible;border:solid 1px blue;'
    ?? ??? ?>?? ??? ??? ?
    ?? ??? ??? ?<div id='rect'
    ?? ??? ??? ??? ?style='position:absolute;background-color: #FF99FF'?? ??? ??? ?
    ?? ??? ??? ?>?? ??? ??? ?
    ?? ??? ?</div>?? ?
    ?? ?</div>
    ?? ??? ?<script language="javascript">
    ?? ??? ??? ?
    ?? ??? ??? ?// 是否需要(允許)處理鼠標的移動事件,默認識不處理
    ?? ??? ??? ?var select = false;
    ?? ??? ??? ?
    ?? ??? ??? ?var rect = document.getElementById("rect");
    ?? ??? ??? ?// 設置默認值,目的是隱藏圖層
    ?? ??? ??? ?rect.style.width = 0;
    ?? ??? ??? ?rect.style.height = 0;
    ?? ??? ??? ?rect.style.visibility = 'hidden';
    ?? ??? ??? ?//讓你要畫的圖層位于最上層
    ?? ??? ??? ?rect.style.zIndex = 1000;
    ?? ??? ??? ?
    ?? ??? ??? ?// 記錄鼠標按下時的坐標
    ?? ??? ??? ?var downX = 0;
    ?? ??? ??? ?var downY = 0;
    ?? ??? ??? ?// 記錄鼠標抬起時候的坐標
    ?? ??? ??? ?var mouseX2=downX;
    ?? ??? ??? ?var mouseY2=downY;
    ?? ??? ??? ?
    ?? ??? ??? ?//處理鼠標按下事件
    ?? ??? ??? ?function down(event){
    ?? ??? ??? ??? ?// 鼠標按下時才允許處理鼠標的移動事件
    ?? ??? ??? ??? ?select = true;
    ?? ??? ??? ??? ?//讓你要畫框的那個圖層顯示出來
    ?? ??? ??? ???? //rect.style.visibility = 'visible';
    ?? ??? ??? ??? ?// 取得鼠標按下時的坐標位置
    ?? ??? ??? ??? ?downX = event.clientX;
    ?? ??? ??? ??? ?downY = event.clientY;
    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?//設置你要畫的矩形框的起點位置
    ?? ??? ??? ??? ?rect.style.left = downX;
    ?? ??? ??? ??? ?rect.style.top = downY;
    ?? ??? ??? ?}
    ?? ??? ??? ?
    ?? ??? ??? ?//鼠標抬起事件
    ?? ??? ??? ?function up(event){
    ?? ??? ??? ??? ?//鼠標抬起,就不允許在處理鼠標移動事件
    ?? ??? ??? ??? ?select = false;
    ?? ??? ??? ??? ?//隱藏圖層
    ?? ??? ??? ??? ?rect.style.visibility = 'hidden';
    ?? ??? ??? ?}
    ?? ??? ??? ?
    ?? ??? ??? ?//鼠標移動事件,最主要的事件
    ?? ??? ??? ?function move(event){
    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?// 取得鼠標移動時的坐標位置
    ?? ??? ??? ??? ?mouseX2 = event.clientX;
    ?? ??? ??? ??? ?mouseY2 = event.clientY;
    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?// 設置拉框的大小?? ?
    ?? ??? ??? ??? ?rect.style.width = Math.abs( mouseX2 - downX );
    ?? ??? ??? ??? ?rect.style.height = Math.abs( mouseY2 - downY );?? ?
    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?/*
    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?這個部分,根據你鼠標按下的位置,和你拉框時鼠標松開的位置關系,可以把區域分為四個部分,根據四個部分的不同,
    ?? ??? ??? ??? ?我們可以分別來畫框,否則的話,就只能向一個方向畫框,也就是點的右下方畫框.
    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?*/
    ?? ??? ??? ??? ?if(select){
    ?? ??? ??? ??? ??? ?
    ??? ?? ??? ??? ????rect.style.visibility = 'visible';
    ???
    ?? ??? ??? ??? ??? ?// A part
    ?? ??? ??? ??? ??? ?if( mouseX2 < downX && mouseY2 < downY ){
    ?? ??? ??? ??? ??? ??? ?rect.style.left = mouseX2;
    ?? ??? ??? ??? ??? ??? ?rect.style.top = mouseY2 ;?? ?
    ?? ??? ??? ??? ??? ?}
    ?? ??? ??? ??? ??? ?
    ?? ??? ??? ??? ??? ?// B part
    ?? ??? ??? ??? ??? ?if( mouseX2 > downX && mouseY2 < downY){
    ?? ??? ??? ??? ??? ??? ?rect.style.left = downX ;
    ?? ??? ??? ??? ??? ??? ?rect.style.top = mouseY2;?? ?
    ?? ??? ??? ??? ??? ?}
    ?? ??? ??? ??? ??? ?
    ?? ??? ??? ??? ??? ?// C part
    ?? ??? ??? ??? ??? ?if( mouseX2 < downX && mouseY2 > downY){
    ?? ??? ??? ??? ??? ??? ?rect.style.left = mouseX2;
    ?? ??? ??? ??? ??? ??? ?rect.style.top = downY ;?? ?
    ?? ??? ??? ??? ??? ?}
    ?? ??? ??? ??? ??? ?
    ?? ??? ??? ??? ??? ?// D part
    ?? ??? ??? ??? ??? ?if( mouseX2 > downX && mouseY2 > downY ){
    ?? ??? ??? ??? ??? ??? ?rect.style.left = downX ;
    ?? ??? ??? ??? ??? ??? ?rect.style.top = downY;
    ?? ??? ??? ??? ??? ?}?? ??? ??? ?
    ?? ??? ??? ?
    ?? ??? ??? ??? ?}
    ?? ??? ??? ??? ?/*
    ?? ??? ??? ??? ??? ?這兩句代碼是最重要的時候,沒有這兩句代碼,你的拉框,就只能拉框,在鼠標松開的時候,
    ?? ??? ??? ??? ??? ?拉框停止,但是不能相應鼠標的mouseup事件.那么你想做的處理就不能進行.
    ?? ??? ??? ??? ??? ?這兩句的作用是使當前的鼠標事件不在冒泡,也就是說,不向其父窗口傳遞,所以才可以相應鼠標抬起事件,
    ?? ??? ??? ??? ??? ?這個部分我也理解的不是特別的清楚,如果你需要的話,你可以查資料.但是這兩句話確實最核心的部分,
    ?? ??? ??? ??? ??? ?為了這兩句話,為了實現鼠標拉框,我搞了幾天的時間.
    ?? ??? ??? ??? ?*/
    ?? ??? ?? window.event.cancelBubble = true;
    ?? ??? ?? window.event.returnValue = false;?? ?

    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?function getDivOffsetLeft(){
    ?? ??? ??? ??? ??? ?var lay1 = document.getElementById("lay1");
    ?? ??? ??? ??? ??? ?//var rect = document.getElementById("rect");
    ?? ??? ??? ??? ??? ?return lay1.offsetLeft;
    ?? ??? ??? ??? ?}
    ?? ??? ??? ??? ?function getDivOffsetTop(){
    ?? ??? ??? ??? ??? ?var lay1 = document.getElementById("lay1");
    ?? ??? ??? ??? ??? ?//var rect = document.getElementById("rect");
    ?? ??? ??? ??? ??? ?return lay1.offsetTop;
    ?? ??? ??? ??? ?}
    ?? ??? ??? ?
    ?? ??? ??? ?}
    ?? ??? ??? ?
    ?? ??? ??? ?
    ?? ??? ??? ?
    ?? ??? ?</script>

    ?? ?</body>

    </html>



    |----------------------------------------------------------------------------------------|
                               版權聲明  版權所有 @zhyiwww
                引用請注明來源 http://www.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2007-04-03 16:04 zhyiwww 閱讀(6500) 評論(7)  編輯  收藏 所屬分類: javascript

    FeedBack:
    # re: javascript鼠標拉框(框選)的實現
    2007-04-03 16:18 | 山風小子
    博主,您好!
    您的程序我試過了,的確很棒!
    但稍微有些不足之處,留待改進,當鼠標單擊,雙擊時,那個粉紅色的框框會突然出現。
    希望您做的更好:)  回復  更多評論
      
    # re: javascript鼠標拉框(框選)的實現
    2007-04-03 18:17 | zhyiwww
    @山風小子
    因為在鼠標按下的時候就把層顯示出來了。所以會有閃爍感。
    你看上面上面的綠色的部分,就知道有什么不同了。
    現在把 rect.style.visibility = 'visible';放在了鼠標move事件里面,也就是只要在鼠標移動事件處理的時候才會去把這一個層顯示出來。就不會有問題了。
    你可以試一下。  回復  更多評論
      
    # re: javascript鼠標拉框(框選)的實現
    2007-04-03 19:48 | cresposhi
    路過,幫忙測試了一下,有點點小bug。當拉框鼠標超過容器(也就是相應鼠標事件的區域)后,再回到容器這個時候還是正常,但在容器里單擊被拉的框位置就會跑到鼠標的右下方,顯然就錯位了,呵呵。

    既然同樣是JSer,再多說兩句,給哥們一個建議吧,這些對事件和頁面坐標操作比較多的程序最好借助于prototype框架來寫,如果你用prototype就不會發生你所說的花了幾天時間,查了N多資料才搞定那兩行藍色的代碼的事情了,因為prototype里面已經給做了,并且很完美,且兼容瀏覽器,如果你說想知道原理,需要從底層來編寫,其實可以選擇讀prototype源碼來的更快更好。并且代碼也不會長到以致于我真的很難有耐性讀完,不過我還是堅持了,支持每一個JSer,呵呵。

    呵呵 我話太多,不好意思占用樓主這么多地方,也不知道我形容清楚了沒,如果有什么疑問可以來我博客交流,閃先!  回復  更多評論
      
    # re: javascript鼠標拉框(框選)的實現
    2007-04-03 21:46 | zhyiwww
    謝謝您的建議。我覺得你的這個信息可能會對我有更大的幫助。
    其實是因為我不知道,不是我不想用。我對javascript不是很熟悉,所以才會為了這個問題花了不少的時間,不過現在能自己通過找資料去獨立的解決這個問題也覺得挺有成就感的。隨著對JS的深入,可能就能夠接受更多的信息,可以使用更多的擴展。那么在實現功能上就可以更加靈活。  回復  更多評論
      
    # re: javascript鼠標拉框(框選)的實現
    2009-11-19 09:48 | reader
    請問個問題??!能不能讓那個畫出來的粉框在畫選完之后還能在頁面中顯示???
      回復  更多評論
      
    # re: javascript鼠標拉框(框選)的實現[未登錄]
    2012-02-16 00:40 | kk
    試一下給document綁定mouseup事件,呵呵。  回復  更多評論
      
    # re: javascript鼠標拉框(框選)的實現[未登錄]
    2013-04-24 10:16 |
    能幫忙優化下嗎?既然是框選,方框最好是半透明吧(不擋住后面的內容)。能綜合上http://www.yuzi.me/Share/Opacity-Transp.html  回復  更多評論
      
    主站蜘蛛池模板: 亚洲乱妇熟女爽到高潮的片| 有色视频在线观看免费高清在线直播| 欧洲亚洲国产清在高| 综合自拍亚洲综合图不卡区| 亚洲а∨天堂久久精品9966| 一级毛片在播放免费| 97热久久免费频精品99| 亚洲精品天堂成人片?V在线播放| 亚洲av无码片在线播放| 亚洲国产AV无码一区二区三区| 成人影片一区免费观看| 曰皮全部过程视频免费国产30分钟| 中文字幕亚洲天堂| 亚洲乱妇老熟女爽到高潮的片| 人禽杂交18禁网站免费| 亚洲av无码不卡| 久久综合国产乱子伦精品免费| 亚洲精品无码成人片在线观看| 国产特黄特色的大片观看免费视频| 四虎成人免费网站在线| 亚洲人成在线观看| 国产中文字幕在线免费观看| 亚洲国产成人久久精品99| 亚洲精华国产精华精华液好用| 国产高清免费的视频| 亚洲乱色伦图片区小说| 亚洲国产高清精品线久久| 无码av免费一区二区三区试看| 美腿丝袜亚洲综合| 久久ww精品w免费人成| 国产亚洲色婷婷久久99精品| xxxxxx日本处大片免费看| 亚洲国产一区国产亚洲| 全免费a级毛片免费看无码| 亚洲av无码电影网| 天天影院成人免费观看| 亚洲a∨无码男人的天堂| 国产一级淫片免费播放| 337P日本欧洲亚洲大胆艺术图| 女人被男人躁的女爽免费视频| 国产免费久久久久久无码|