> [Wiki](Home) ? [[API--中文手冊]] ? [[行為]] ? **縮放**
* 如發現翻譯不當或有其他問題可以通過以下方式聯系譯者:
* 郵箱:zhang_tianxu@sina.com
* QQ群:[D3數據可視化](http://jq.qq.com/?_wv=1027&k=ZGcqYF)205076374,[大數據可視化](http://jq.qq.com/?_wv=1027&k=S8wGMe)436442115
該行為會自動在容器元素中創建事件監聽器來處理元素的縮放和平移動作,可支持鼠標事件和觸摸事件。
# d3.behavior.zoom()
構造一個新的縮放行為。
# zoom(selection)
應用縮放行為到指定的選擇器selection,注冊所需的事件監聽器,支持縮放和拖拽行為。
# zoom.translate([translate])
指定當前的縮放平移向量為translate;如果未指定translate,返回當前平移向量,默認:[0, 0]。
# zoom.scale([scale])
指定當前的縮放比例,如果未指定scale,則返回當前的縮放比例,默認為1。
# zoom.scaleExtent([extent])
指定縮放比例的允許范圍為一個包含兩個數值元素的數組,[minimum, maximum];如果未指定extent,則返回當前的比例范圍,默認為:[0, Infinity]。
# zoom.center([center])
如果指定了center ,為鼠標滾輪設置縮放的焦點(focal point [x, y])為center ,并返回當前的縮放行為對象;如果未指定center ,則返回當前的縮放焦點,默認為null;一個為null的縮放焦點即:是以當前鼠標指針為縮放焦點。
# zoom.size([size])
如果指定了size,設置視窗大小為指定的尺寸size([width, height]),并返回當前的縮放行為對象;如果未指定size,返回當前的視窗大小,默認為:[960, 500];size是支持在平移時平滑的進行縮放行為。
# zoom.x([x])
指定x比例,并且它的定義域會在縮放時自動調整;如果未指定[x],返回當前的x縮放,默認為null;如果縮放的定義域或范圍是通過函數修改的,則這個函數應該被再次調用。設置x比例,并重置縮放比例為1,平移為[0, 0]。
# zoom.y([y])
指定y比例,并且它的定義域會在縮放時自動調整;如果未指定[y],返回當前的y縮放,默認為null;如果縮放的定義域或范圍是通過函數修改的,則這個函數應該被再次調用,設置y比例,并重置縮放比例為1,平移為[0, 0]。
# zoom.on(type, listener)
注冊監聽器listener來接收指定事件類型type的縮放行為;支持的事件類型有:
zoomstart - 縮放開始時 (e.g., touchstart);
zoom - 縮放行為發生時 (e.g., touchmove);
zoomend - 縮放行為結束時 (e.g., touchend);
如果相同的事件類型已經指定了監聽器,則首先會移除老的監聽器,在加入新的監聽器;要給一個事件類型注冊多個監聽器,則可以使用事件類型加命名空間后綴的形式,如:"zoom.foo" 和 "zoom.bar";想要移除監聽器,只需要傳入null即可;
對于鼠標滾輪事件,針對瀏覽器而言是沒有明確的結束和開始通知的,在50毫秒內的多個事件會被分組到單個縮放中;如果想要更好的處理該種滾輪類型,請參考您的瀏覽器廠商,來獲得更好的支持;
事件發生時,d3.event中會包含以下屬性:
scale - 一個數值,即當前的比例;
translate - 一個含有兩個數值元素的數組,代表平移向量。
# zoom.event(selection)
如果selection是一個選擇器,立刻給注冊的監聽器分派一個縮放動作,作為三個時間序列:zoomstart,zoom 和 zoomend;這可以在設置了平移或比例后立刻觸發監聽器;如果selection是一個平移(transition),注冊適當補間,使得縮放行為在過渡的過程中分派事件:zoomstart 事件發生在此前設定的視圖平移開始時,zoom 事件則時刻發生在平移transition中,zoomend 事件則發生在平移transition結束時;注意:如果用戶開始一個新的縮放行為前,之前的縮放行為動畫會被立刻中斷。
* 魏飛T20141125
* guluP20141208 2014-12-8 22:21:03