可視化基礎(chǔ)

畫布元素

canvash5新增
canvas地址

瀏覽器的坐標(biāo)

直線

<body>
  <canvas id="line" style="background-color: pink"></canvas>

  <script type="text/javascript">
  // 獲取畫布元素
  var line = document.getElementById('line')
  // 獲取工具集
  var cxt = line.getContext("2d")
  // 定位開始點
  cxt.moveTo(22, 22)
  // 拖動并結(jié)束點
  cxt.lineTo(102, 22)
  // 繪制
  cxt.stroke()
  </script>

</body>

三角形

<body>
  <canvas id="line" style="background-color: pink"></canvas>

  <script type="text/javascript">
  // 獲取畫布元素
  var line = document.getElementById('line')
  // 獲取工具集
  var cxt = line.getContext("2d")
  // 定位點
  cxt.moveTo(20, 20)
  cxt.lineTo(150, 20)
  cxt.lineTo(80, 80)
  
  cxt.closePath()

  // 繪制
  cxt.stroke()
  </script>

</body>

改變線條顏色

  // 設(shè)置線條顏色
  cxt.strokeStyle='red';
  // 設(shè)置線條寬度
  cxt.lineWidth=5;

改變每根線條的顏色圈澈, 重復(fù)此過程,把三根線連一起即可

  // 設(shè)置顏色
  cxt.strokeStyle='red';
  cxt.moveTo(20, 20)
  cxt.lineTo(150, 20)
  // 繪制
  cxt.stroke()
  // 重置當(dāng)前路徑
  cxt.beginPath();

文字

<body>
  <canvas id="cvs" style="background-color: pink"></canvas>

  <script type="text/javascript">
  // 獲取畫布元素
  var cvs = document.getElementById('cvs')
  // 獲取工具集
  var context = cvs.getContext("2d")

  // 文字樣式
  context.font='bold 30px sans-serif';
  // 繪制文字
  context.fillText('text', 30, 30);
  context.strokeText('text', 30, 90);
  
  </script>

</body>
兩者區(qū)別

文字對齊脐往,文字對齊的坐標(biāo)軸庐氮,是相對于文字繪制的坐標(biāo)的

  context.textAlign='right';
  context.textBaseline='middle';

canvas圖形輸出到控制臺

  var imgUrl = cvs.toDataURL();
  console.log(imgUrl)

矩形

<body>
  <canvas id="cvs" style="background-color: pink"></canvas>

  <script type="text/javascript">
  // 獲取畫布元素
  var cvs = document.getElementById('cvs')
  // 獲取工具集
  var context = cvs.getContext("2d")

  // 1.繪制路徑
  // context.rect(30, 30, 50, 50);
  // 2.描邊或填充
  // context.stroke();
  // context.fill()

  // 調(diào)用一次方法完成
  // context.strokeRect(30, 30, 50, 50);
  context.fillRect(30, 30, 50, 50);

  // 清空矩形內(nèi)像素
  context.clearRect(30, 30, 50, 50);
  
  </script>

</body>

  // 繪制圓
  context.arc(50, 50, 40,0, Math.PI / 180 * 360, true);
  // context.stroke();
  context.fill();

圖片

  // 定義圖片對象
  var img = new Image()
  img.src='./img/dog.jpg'
  img.onload = function () {
    // 繪制圖片
    // context.drawImage(this, 10, 10);
    // 指定圖片的寬高
    // context.drawImage(this, 10, 10, 122, 200);
    // 裁切放大圖片
    context.drawImage(this, 120, 120, 100, 100, 10, 10, 300, 300);
  }

刮刮卡

<body>
  <canvas id="cvs"></canvas>

  <script type="text/javascript">
  // 獲取畫布元素
  var cvs = document.getElementById('cvs')
  // 獲取工具集
  var context = cvs.getContext("2d")

  // 1. 定義中獎信息
  var randomArr = ['一等獎', '二等獎', '三等獎', '沒有獎']
  var random = randomArr[Math.floor(Math.random()*randomArr.length)]

  context.font='bold 30px sans-serif';
  context.textAlign = 'center'
  context.textBaseline='middle';
  context.fillStyle='red'; 

  context.fillText(random, cvs.width/2, cvs.height/2);
  
  // 2. 將中獎信息生成為背景圖片,清空畫布,繪制覆蓋的矩形
  var imgUrl = cvs.toDataURL('iamge/png',1)
  cvs.style.background = 'url('+imgUrl+')'
  
  context.clearRect(0, 0, cvs.width, cvs.height);

  context.fillStyle='#666'
  context.fillRect(0, 0, cvs.width, cvs.height);
  
  // 3. 實現(xiàn)刮擦的效果
  var flag = false
  cvs.addEventListener('mousedown', function() {
    flag = true
    // 將刮擦過的區(qū)域設(shè)置為透明
    context.globalCompositeOperation='destination-out';
  })
  cvs.addEventListener('mousemove', function(e) {
    if(flag) {
      var x = e.clientX
      var y = e.clientY
      context.fillRect(x, y, 40, 40)
    }
  })
  cvs.addEventListener('mouseup', function() {
    flag = false
  })
  
  </script>

</body>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桃纯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子披坏,更是在濱河造成了極大的恐慌态坦,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棒拂,死亡現(xiàn)場離奇詭異伞梯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)着茸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門壮锻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琐旁,“玉大人涮阔,你說我怎么就攤上這事』遗梗” “怎么了敬特?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牺陶。 經(jīng)常有香客問我伟阔,道長,這世上最難降的妖魔是什么掰伸? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任皱炉,我火速辦了婚禮,結(jié)果婚禮上狮鸭,老公的妹妹穿的比我還像新娘合搅。我一直安慰自己,他們只是感情好歧蕉,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布灾部。 她就那樣靜靜地躺著,像睡著了一般惯退。 火紅的嫁衣襯著肌膚如雪赌髓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音锁蠕,去河邊找鬼夷野。 笑死,一個胖子當(dāng)著我的面吹牛荣倾,可吹牛的內(nèi)容都是我干的扫责。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼逃呼,長吁一口氣:“原來是場噩夢啊……” “哼鳖孤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抡笼,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤苏揣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后推姻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體平匈,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年藏古,在試婚紗的時候發(fā)現(xiàn)自己被綠了增炭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡拧晕,死狀恐怖隙姿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厂捞,我是刑警寧澤输玷,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站靡馁,受9級特大地震影響欲鹏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臭墨,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一赔嚎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胧弛,春花似錦尤误、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掺冠,卻和暖如春沉馆,著一層夾襖步出監(jiān)牢的瞬間码党,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工斥黑, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留揖盘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓锌奴,卻偏偏與公主長得像兽狭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹿蜀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348