變化的DIV

需求

這里寫圖片描述

實(shí)現(xiàn)如上頁面给涕,瀏覽器窗口的大小改變時(shí),view的大小隨之改變,使得頁面中不出現(xiàn)橫向的滾動(dòng)條够庙;頁面中的view是可以進(jìn)行拖動(dòng)的恭应,這種拖動(dòng)不是位置的互換,可以將view拖動(dòng)到任何位置耘眨;頁面中的view大小是可以發(fā)生改變的昼榛。

設(shè)計(jì)思路

構(gòu)建一個(gè)畫布,畫布是有一個(gè)個(gè)正方形格子來組成的剔难,畫布的左上角是坐標(biāo)的原點(diǎn)胆屿,向右是x軸正方向,向下是y軸正方向偶宫;每個(gè)view都有自己對(duì)應(yīng)的坐標(biāo)點(diǎn)非迹,根據(jù)坐標(biāo)點(diǎn)去擺放位置,利用view的寬度和高度來計(jì)算一行的view是否放滿纯趋,需要進(jìn)行換行的擺放憎兽;每一個(gè)veiw都采用絕對(duì)定位的方式。

style {
    position: absolute;
    left:
    top:
}

實(shí)現(xiàn)

1结闸、畫布構(gòu)建

//利用一個(gè)二維數(shù)組當(dāng)做模型唇兑,y是一列縱向格子的總數(shù),x是一行橫向格子的總數(shù)
//其實(shí)就是canvas數(shù)組保存所有的坐標(biāo)點(diǎn)
var canvas = [y][x];
//初始化數(shù)組桦锄,使得每一個(gè)格子的只都為0
//0代表此處沒有view扎附,1表示此處有view
canvas = 0;

2、view的保存

//view的模型结耀,保存view的坐標(biāo)留夜,寬度和高度
var view1 = {
    posX:0,
    posY:0,
    width:100px;
    height:100px;
    };
var view2 = {
    posX:2,
    posY:1,
    width:100px;
    height:50px;
    };
//使用一個(gè)數(shù)組保存所有的view,當(dāng)view的位置發(fā)現(xiàn)變化時(shí),更新viewArray
var viewArray = [];
viewArray.push(view1);
viewArray.push(view2);

3图甜、view位置的計(jì)算和更新
① 瀏覽器窗口大小改變

var cellWidth = cellHeight = 100px;
//獲取瀏覽器大小改變比例
var widthPro = (|(oldCanvasWidth-newCanvasWidth|*0.1)/oldCanvasWidth;
var heightPro = (|(oldCanvasHeight-newCanvasHeight|*0.1)/oldCanvasHeight;
//每一個(gè)view的新大小
var viewWidth = odlViewWidth * (|1-widthPro|);
var viewHeight = oldViewHeight * (|1-heightPro|);
//計(jì)算坐標(biāo)
updateViewPos();
//設(shè)置屬性
style {
    left: posX*cellWidth+viewWidth;
    top: posY*cellHeight+viewHeight;
}

② view拖動(dòng)

cellArray[][] = 0;
//通過html拖動(dòng)事件可以獲取碍粥,獲取到被拖動(dòng)的view、拖動(dòng)到的index和拖動(dòng)到的index上的view;
var dragedView黑毅;
var dragedIndex;
var dropedView;
//將dropedView的坐標(biāo)賦給dragedView
dragedView.posX = dropedView.posX;
dragedView.posY = dropedView.posY;
//為了坐標(biāo)重復(fù)講dropedView的橫坐標(biāo)加一;
dropedView.posX++;
//改變viewArray中dragedView的位置
viewArray.remove(dragedView);
viewArray.insert(dragedView, dragedIndex);
//計(jì)算坐標(biāo)
updateViewPos();
//設(shè)置屬性
style {
    left: posX*cellWidth+viewWidth;
    top: posY*cellHeight+viewHeight;
}

③ view大小改變

cellArray[][] = 0;
//獲取改變大小的view
var resizeView
//更新viewArray
viewArray.update(resizeView);
//計(jì)算坐標(biāo)
updateViewPos();
//設(shè)置屬性
style {
    left: posX*cellWidth+viewWidth;
    top: posY*cellHeight+viewHeight;
}

④ 計(jì)算坐標(biāo)

function updateViewPos() {
    //如果當(dāng)前坐標(biāo)的值為1嚼摩,先將x軸坐標(biāo)加1
    while(1 == cellArray[view.posY][view.posX]) {
        view.posX++;
        //X軸放不下的情況將x坐標(biāo)置零,y軸坐標(biāo)加1
        if(view.posX > (canvas.width-view.width)) {
            view.posX = 0;
            view.posY++;
        }
        //Y軸放不下的情況矿瘦,擴(kuò)大canvas容量
        if(view.posY > (canvas.height - view.height)) {
            var row = [x];
            canvas.push(row );
        }
    }
    //將view占的格子的值設(shè)置為1
    for(var i = view.posY; i < canvas.heigth/cellHeight ; i++) {
        for(var j = view .posX; j < canvas.width/cellWidth ; j++) {
            canvas[i][j] = 1;
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枕面,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缚去,更是在濱河造成了極大的恐慌潮秘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件易结,死亡現(xiàn)場(chǎng)離奇詭異枕荞,居然都是意外死亡柜候,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門躏精,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渣刷,“玉大人,你說我怎么就攤上這事玉控》芍鳎” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵高诺,是天一觀的道長。 經(jīng)常有香客問我碾篡,道長虱而,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任开泽,我火速辦了婚禮牡拇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穆律。我一直安慰自己惠呼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布峦耘。 她就那樣靜靜地躺著剔蹋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辅髓。 梳的紋絲不亂的頭發(fā)上泣崩,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音洛口,去河邊找鬼矫付。 笑死,一個(gè)胖子當(dāng)著我的面吹牛第焰,可吹牛的內(nèi)容都是我干的买优。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挺举,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杀赢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起豹悬,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤葵陵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瞻佛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脱篙,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娇钱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绊困。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片文搂。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秤朗,靈堂內(nèi)的尸體忽然破棺而出煤蹭,到底是詐尸還是另有隱情,我是刑警寧澤取视,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布硝皂,位于F島的核電站,受9級(jí)特大地震影響作谭,放射性物質(zhì)發(fā)生泄漏稽物。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一折欠、第九天 我趴在偏房一處隱蔽的房頂上張望贝或。 院中可真熱鬧,春花似錦锐秦、人聲如沸咪奖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羊赵。三九已至,卻和暖如春斤葱,著一層夾襖步出監(jiān)牢的瞬間慷垮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工揍堕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留料身,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓衩茸,卻偏偏與公主長得像芹血,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子楞慈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容