最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS+canvas畫一個圓錐實例代碼

 更新時間:2017年12月13日 09:18:10   投稿:laozhang  
本篇文章給大家講解html中用canvas函數(shù)配合JS畫出一個圓錐形的圖形實例,有需要的朋友學(xué)習(xí)測試下吧。

以下是我們給大家分享是實例代碼:

<html>
<head>
<title>我的第一個 HTML 頁面</title>
</head>
<body>
<canvas id='cvs' width='1000' height="800">
</canvas>
<script>
const cvs =document.getElementById('cvs');

 // 計算畫布的寬度
  const width = cvs.offsetWidth;
  // 計算畫布的高度
 const  height = cvs.offsetHeight;
const ctx = cvs.getContext('2d');
  // 設(shè)置寬高
  cvs.width = width;
  cvs.height = height;
/**
ctx:context
x,y:偏移 縱橫坐標(biāo)
w:度
h:高
color:顏色 數(shù)組,可以把顏色提取出來方便自定義
*/
var Cone = function(ctx,x,y,w,h,d,color){
ctx.save();
ctx.translate(x, y);
var blockHeight=h;
// 中點
var x2 = 0;
var y2 = 20;
var k2 = 10;
var w2 = w;
var h2 = h;
// 遞減度
var decrease = d; 
 ctx.beginPath();
ctx.moveTo(x2+w2,y2);
// 橢圓加了邊框,所以加1減1
ctx.bezierCurveTo(x2+w2, y2+k2, x2-w2, y2+k2, x2-w2-1, y2);

ctx.lineTo(x2-w2+decrease,y2+blockHeight);
ctx.bezierCurveTo(x2-w2+decrease, y2+blockHeight+k2, x2+w2-decrease, y2+blockHeight+k2, x2+w2-decrease, y2+blockHeight);
ctx.lineTo(x2+w2+1,y2);
var linear = ctx.createLinearGradient(x2-w2, y2,x2+w2-decrease, y2+blockHeight);
linear.addColorStop(0,color[0]);
linear.addColorStop(1,color[1]);
ctx.fillStyle = linear ; 
ctx.strokeStyle=linear 
ctx.fill();
//ctx.stroke();
ctx.closePath();
//畫橢圓
ctx.beginPath();
ctx.moveTo(x2-w2, y2);
ctx.bezierCurveTo(x2-w2, y2-k2, x2+w2, y2-k2, x2+w2, y2);
ctx.bezierCurveTo(x2+w2, y2+k2, x2-w2, y2+k2, x2-w2, y2);
var linear = ctx.createLinearGradient(x2-w2, y2,x2+w2-decrease, y2+blockHeight);
linear.addColorStop(1,color[0]);
linear.addColorStop(0,color[1]);
ctx.fillStyle = linear ; 
ctx.strokeStyle=linear 
ctx.closePath();

ctx.fill();
ctx.stroke();

ctx.restore();
};
function dr(m){
const colorList =[
{
color:['#76e3ff','#2895ea'],
height:60
},
{
color:['#17ead9','#5d7ce9'],
height:30
},
{
color:['#1ca5e5','#d381ff'],
height:40
},
{
color:['#ffa867','#ff599e'],
height:70
},
{
color:['#ffa6e3','#ec6a70'],
height:50
},
{
color:['#f9c298','#d9436a'],
height:30
},
{
color:['#eb767b','#9971dc'],
height:30
},
{
color:['#f06af9','#5983ff'],
height:100
},
];
const space = 20;
let coneHeight = 0;
// 間隔
const gap = 20;
const x = 380;
const y = 20;
const angle = 30;
let coneWidth=0;
colorList.forEach((item)=>{
coneHeight += item.height +space;
});
// 最下面的先畫(層級)
colorList.reverse().forEach((item,index)=>{
const decrease =Math.tan(Math.PI*angle/180)*(item.height+space);
coneWidth=coneWidth + decrease;
coneHeight = coneHeight-item.height - space;
//圓錐
Cone(ctx,x,coneHeight ,coneWidth ,item.height,decrease,item.color);
// 中點
const cX =parseInt(x)+0.5;
const cY = parseInt(coneHeight + space+ item.height/2)+0.5;
//文字
ctx.save();
ctx.translate(cX , cY );
ctx.textBaseline='top';
ctx.textAlign='center';
const fontSize = item.height/2>=40?40:item.height/2;
ctx.font = fontSize + 'px serif';
//const textMetrics = ctx.measureText('Hello World');
ctx.fillStyle = '#ffffff';
ctx.fillText('5000',0,-fontSize/3);
ctx.restore();
const xLineA =parseInt(coneWidth-decrease/2)+10;
const xLine =parseInt(m+xLineA )>=x?x:m+xLineA ;
//線
ctx.save();
ctx.translate(cX , cY );
ctx.setLineDash([3,2]); 
ctx.strokeStyle = '#a4a4a4'; 
ctx.beginPath(); 
ctx.moveTo(xLineA , 0); 
ctx.lineTo(xLine +20, 0); 
ctx.stroke();
ctx.restore();
//描述文字
ctx.save();
ctx.translate(cX , cY );
ctx.textBaseline='middle';
ctx.textAlign='left';
ctx.font = '22px serif';
//const textMetrics = ctx.measureText('Hello World');
ctx.fillStyle = '#4a4a4a';
ctx.fillText('進(jìn)入收件列表2',xLine+gap ,0);
ctx.restore();
//轉(zhuǎn)化率文字
ctx.save();
ctx.translate(cX , cY );
ctx.textBaseline='middle';
ctx.textAlign='left';
ctx.font = '28px bold serif ';
ctx.fillStyle = '#007dfd';
ctx.fillText('20%',xLine+gap ,(item.height+gap)/2 );
ctx.restore();
});
}
let m=0;  
let gravity =10;   
(function drawFrame(){
      window.requestAnimationFrame(drawFrame,cvs);
      ctx.clearRect(0,0,cvs.width,cvs.height);
m += gravity;
      dr(m);
})();
</script>
</body>
</html>

這是腳本之家測試后的完成圖:

相關(guān)文章

  • Javascript函數(shù)式編程語言

    Javascript函數(shù)式編程語言

    JavaScript 是近年來非常受矚目的一門編程語言,它既支持面向?qū)ο缶幊?,也支持函?shù)式編程。本文專門介紹JavaScript函數(shù)式編程的特性。
    2015-10-10
  • 使用JS調(diào)用工控機(jī)(Windows)虛擬鍵盤

    使用JS調(diào)用工控機(jī)(Windows)虛擬鍵盤

    在工控機(jī)觸摸屏中,通過瀏覽器web端進(jìn)行表單輸入,當(dāng)聚焦表單輸入框并不會出現(xiàn)虛擬鍵盤進(jìn)行輸入,本文介紹將給大家介紹如何通過js調(diào)用工控機(jī)(Windows)虛擬鍵盤,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 淺談js中function的參數(shù)默認(rèn)值

    淺談js中function的參數(shù)默認(rèn)值

    下面小編就為大家?guī)硪黄獪\談js中function的參數(shù)默認(rèn)值。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • javascript實現(xiàn)簡單的html5視頻播放器

    javascript實現(xiàn)簡單的html5視頻播放器

    網(wǎng)頁視頻音頻播放器大家并不陌生,在IE中我們可以運行ActiveX來嵌入微軟的Media Player或者其他的本地播放器,當(dāng)然可能大部分我們都是使用Flash來制作播放器。在HTML5發(fā)展迅速的今天,讓我們嘗試用HTML5來制作網(wǎng)頁播放器吧,畢竟無論是PC還是移動設(shè)備,HTML5是未來的趨勢
    2015-05-05
  • 微信小程序?qū)崿F(xiàn)跟隨菜單效果和循環(huán)嵌套加載數(shù)據(jù)

    微信小程序?qū)崿F(xiàn)跟隨菜單效果和循環(huán)嵌套加載數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)跟隨菜單效果和循環(huán)嵌套加載數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • layui checkbox默認(rèn)選中,獲取選中值,清空所有選中項的例子

    layui checkbox默認(rèn)選中,獲取選中值,清空所有選中項的例子

    今天小編就為大家分享一篇layui checkbox默認(rèn)選中,獲取選中值,清空所有選中項的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • stats.js使用性能監(jiān)控源碼解讀

    stats.js使用性能監(jiān)控源碼解讀

    這篇文章主要為大家介紹了stats.js使用性能監(jiān)控源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • javascript循環(huán)鏈表之約瑟夫環(huán)的實現(xiàn)方法

    javascript循環(huán)鏈表之約瑟夫環(huán)的實現(xiàn)方法

    這是一道比較經(jīng)典的循環(huán)鏈表問題,在華為上機(jī)筆試中也出現(xiàn)過。 約瑟夫環(huán)是一個數(shù)學(xué)的應(yīng)用問題,下面這篇文章主要就給大家介紹了javascript循環(huán)鏈表之約瑟夫環(huán)的實現(xiàn)方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • 關(guān)于JavaScript中異步/等待的用法與理解

    關(guān)于JavaScript中異步/等待的用法與理解

    這篇文章主要給大家介紹了關(guān)于JavaScript中異步/等待的用法與理解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Bootstrap導(dǎo)航條可點擊和鼠標(biāo)懸停顯示下拉菜單的實現(xiàn)代碼

    Bootstrap導(dǎo)航條可點擊和鼠標(biāo)懸停顯示下拉菜單的實現(xiàn)代碼

    這篇文章主要介紹了Bootstrap導(dǎo)航條可點擊和鼠標(biāo)懸停顯示下拉菜單的實現(xiàn)代碼的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06

最新評論

正阳县| 石首市| 明溪县| 大石桥市| 仙桃市| 珠海市| 长沙市| 潼关县| 安陆市| 平阳县| 郧西县| 杭锦后旗| 郑州市| 米泉市| 手游| 曲沃县| 鄂尔多斯市| 武安市| 永安市| 昆明市| 迁西县| 阜平县| 腾冲县| 东安县| 龙门县| 新巴尔虎右旗| 资溪县| 白玉县| 六枝特区| 巨野县| 肥西县| 桐梓县| 乌恰县| 白银市| 夹江县| 会泽县| 上蔡县| 甘德县| 泗水县| 长海县| 青海省|