Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲欧美日韩中文高清一,全免费a级毛片免费看不卡,怡红院亚洲色图

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          27個(gè)精美的時(shí)間線(含源代碼)

          天,讓我們來(lái)學(xué)習(xí)如何使用HTML、CSS、Javascript為網(wǎng)站開(kāi)發(fā)和設(shè)計(jì)創(chuàng)建時(shí)間線。

          1.垂直時(shí)間線 HTML CSS

          源碼:https://codepen.io/itbruno/pen/KwarLp

          2.垂直時(shí)間軸HTML模板

          源碼:https://codepen.io/P233/pen/nbgRXw

          3.垂直時(shí)間線網(wǎng)站

          事例地址:https://codepen.io/z-/pen/bwPBjY

          4.橫向時(shí)間線JS

          事例地址:https://codepen.io/microfront/pen/veagoK

          5.響應(yīng)式水平時(shí)間線 CSS

          事例地址:https://codepen.io/flursh/pen/WNdVmr

          6.簡(jiǎn)單的時(shí)間線 CSS

          事例地址:https://codepen.io/krishnab/pen/OPwqbW

          7.時(shí)間線CSS

          事例地址:https://codepen.io/ygc/pen/rLbJdv

          8.垂直時(shí)間線HTML CSS

          事例地址:https://codepen.io/Fischaela/pen/NWNQKW

          9.垂直時(shí)間線示例

          事例地址:https://codepen.io/ksantangelo/pen/ZBOpoJ

          10.示例10

          源碼:https://codepen.io/jm/pen/nOyqjZ

          11.示例11

          源碼:https://codepen.io/mo7amedk7alid29/pen/dRoMwo

          12.示例12

          源碼:https://codepen.io/banik/pen/ELpWNJ

          13.示例13

          源碼:https://codepen.io/samerpik/pen/OVKyVZ

          14.示例14

          源碼:https://codepen.io/keithwyland/pen/wqNqvy

          15.示例15

          源碼:https://codepen.io/kentchangdesign/pen/jadgvx

          16.示例16

          源碼:https://codepen.io/nsom/pen/Vbopjw

          17.示例17

          源碼:https://codepen.io/paulhbarker/pen/apvGdv

          18.示例18

          源碼:https://codepen.io/jasondavis/pen/nXLJbg

          19.示例19

          源碼:https://codepen.io/jplhomer/pen/AjxPjg

          20.示例20

          源碼:https://codepen.io/cplepage/pen/EozVXL

          21.示例21

          源碼:https://codepen.io/drygiel/pen/nwxLbN

          22.示例22

          源碼:https://codepen.io/plasm/pen/oZbXmj

          23.示例23

          源碼:https://codepen.io/melnik909/pen/qPjwvq

          24.示例24

          源碼:https://codepen.io/jo_Geek/pen/NLoGZZ

          25.示例25

          源碼:https://codepen.io/letsbleachthis/pen/YJgNpv

          26.示例26

          源碼:https://codepen.io/knyttneve/pen/jXpxPv

          27.示例27

          源碼:https://codepen.io/TajShireen/pen/RwrXodK


          vue3 源碼實(shí)戰(zhàn)出來(lái)啦,在面試中,害怕被問(wèn)到 Vue源碼,或者想通過(guò)自己對(duì)Vue 源碼的來(lái)秀一下面試官的,可以了解一下,請(qǐng)點(diǎn)擊底部 閱讀原文 進(jìn)行了解。


          ~完,我是刷碗智,新的一年,我們一起刷刷刷。


          作者:Niemvuilaptrinh 譯者:前端小智 來(lái)源:medium 原文:https://niemvuilaptrinh.medium.com/27-html-timeine-for-web-design-979b8e5d1c05


          atetime類(lèi)型元素

          在HTML5中,新增了時(shí)間輸入類(lèi)型datetime,其含義為選取時(shí)間、日、月、年(UTC時(shí)間)。UTC是協(xié)調(diào)世界時(shí),又稱(chēng)世界統(tǒng)一時(shí)間、世界標(biāo)準(zhǔn)時(shí)間、國(guó)際協(xié)調(diào)時(shí)間。由于中國(guó)采用的是第8時(shí)區(qū)的時(shí)間,所以中國(guó)及其他亞洲國(guó)家大都會(huì)采用UTC+8的時(shí)間。

          datetime屬性的代碼格式如下。

          <input type="datetime" name="user_date"/>

          (1)編輯代碼

          打開(kāi)記事本,編寫(xiě)代碼,在<body>標(biāo)簽中加入以下代碼。并保存為HTML格式文件。


          (2)在瀏覽器中瀏覽效果

          在瀏覽器中瀏覽效果如圖所示,用戶可以在表單中輸入標(biāo)準(zhǔn)的datetime格式,然后單擊【提交】按鈕。


          datetime-local類(lèi)型元素

          在HTML5中,新增了時(shí)間輸入類(lèi)型datetime-local,其含義為選取時(shí)間、日、月、年(本地時(shí)間)例如,中國(guó)使用的datetime-local就是第8時(shí)區(qū)的時(shí)間。

          datetime-local屬性的代碼格式如下。

          <input type="datetime-local" name="user_date"/>

          (1)編輯代碼

          打開(kāi)記事本,編寫(xiě)代碼,在<body>標(biāo)簽中加入以下代碼。并保存為HTML格式文件。


          (2)在瀏覽器中瀏覽效果

          在瀏覽器中瀏覽效果如圖所示,用戶可以在表單中輸入標(biāo)準(zhǔn)的datetime-local格式,然后單擊【提交】按鈕。

          么是Canvas

          <canvas> 是HTML中的一個(gè)元素,它可被用來(lái)通過(guò) JavaScript(Canvas API 或 WebGL API)繪制圖形及圖形動(dòng)畫(huà)。

          Canvas API 提供了一個(gè)通過(guò) JavaScriptHTML<canvas> 元素來(lái)繪制圖形的方式。它可以用于動(dòng)畫(huà)、游戲畫(huà)面、數(shù)據(jù)可視化、圖片編輯以及實(shí)時(shí)視頻處理等方面。

          <canvas>標(biāo)簽本身沒(méi)有繪圖能力,它僅僅是圖形的容器。在HTML,一般通過(guò)Javascript語(yǔ)言來(lái)完成實(shí)際的操作。

          創(chuàng)建HTML頁(yè)面并添加繪圖容器

          本文通過(guò)Javascript操作Canvas制作一個(gè)簡(jiǎn)單的顯示當(dāng)前時(shí)間的動(dòng)畫(huà)時(shí)鐘,了解和學(xué)習(xí)簡(jiǎn)單的canvas用法,僅以拋磚引玉。

          首先創(chuàng)建一個(gè)HTML文件,為了方便管理,使用一個(gè)div標(biāo)簽包裹兩個(gè)canvas標(biāo)簽,并加上一些簡(jiǎn)單的css樣式。

          <!doctype html>
          <html lang="zh-cn">
          <head><title>Canvas繪制動(dòng)畫(huà)時(shí)鐘</title>
          <style>
          html,body{margin:0;padding:0}
          #clockWrap {
          	position: relative;
          }
          canvas {
          	position: absolute;
          }
          #clock-ui {
          	z-index: 2;
          }
          #clock-plate {
          	z-index: 1;
          }
          </style>
          </head>
          <body>
            <div id="clockWrap">
            <canvas id="clock-plate"></canvas>
            <canvas id="clock-ui"></canvas>
          </div>
          <script></script>
          </body></html>

          本示例中使用了兩個(gè)canvas標(biāo)簽(為什么使用兩個(gè),一個(gè)不是更簡(jiǎn)單嗎?),一個(gè)用于繪制鐘面,一個(gè)根據(jù)當(dāng)前時(shí)間實(shí)時(shí)顯示和更新時(shí)針、分針和秒針的動(dòng)態(tài)指向。好了,話不多說(shuō),開(kāi)干。

          繪制鐘面刻度

          一個(gè)簡(jiǎn)單的時(shí)鐘,可以分為鐘面上的刻度和指針。其中刻度和12個(gè)數(shù)字是固定的,我們可以將它們繪制在當(dāng)作背景的canvas上(示例中id為clock-plate的canvas)。

          (1)要使用canvas,首先必須通過(guò)容器獲取渲染上下文:

          var $=function(id){return document.querySelector(id);}//這個(gè)函數(shù)只是為了方便獲取dom元素
          const canvasbg=$("#clock-plate"),
                canvas=$("#clock-ui"),
                ctx = canvasbg.getContext("2d"),//背景容器上下文
                ctxUI = canvas.getContext("2d");//指針容器上下文,后面代碼要用
          //定義畫(huà)布寬度和高度,時(shí)鐘圓直徑,并設(shè)置畫(huà)布大小
          const oW=1000,oH=800,cW=400,r=cW/2,oX=oW/2,oY=oH/2;
          canvas.width=oW;
          canvas.height=oH;
          canvasbg.width=oW;
          canvasbg.height=oH;

          (2)畫(huà)鐘的邊框,為了好看,這里畫(huà)兩個(gè)圈:

           //畫(huà)出時(shí)鐘外圓框
            ctx.lineWidth = 12;
          	ctx.beginPath();
          	ctx.arc(oX, oY, r+14, 0, 2 * Math.PI);
          	ctx.stroke();
          	ctx.closePath();
          	ctx.lineWidth = 8;
          	//畫(huà)出時(shí)鐘內(nèi)圓框(刻度圈)
          	ctx.beginPath();
          	ctx.arc(oX, oY, r, 0, 2 * Math.PI);
          	ctx.stroke();
          	ctx.closePath();
          	ctx.beginPath();

          邊框效果圖

          (3)繪制刻度線和數(shù)字,可以利用三角函數(shù)計(jì)算出每個(gè)刻度的坐標(biāo):

          利用三角函數(shù)計(jì)算刻度線的坐標(biāo)位置

          鐘面上有12個(gè)大格,從正上方12開(kāi)始,它們的度數(shù)分別是270,300,330,0,30,60,90,120,150,180,210,240。然后利用JS的Math.sin和Math.cos分別計(jì)算出各大格的坐標(biāo)。注意:js中Math.sin()和Math.cos()的參數(shù)不是角度數(shù)弧度??梢允褂肕ath.PI/180*角度來(lái)轉(zhuǎn)化,比如將30度轉(zhuǎn)換成弧度=Math.PI/180*30

          //繪制鐘表中心點(diǎn)
          	ctx.beginPath();
          	ctx.arc(oX, oY, 8, 0, 2 * Math.PI);//圓心
          	ctx.fill();
          	ctx.closePath();
          	//設(shè)置刻度線粗細(xì)度
          	ctx.lineWidth = 3;
          	//設(shè)置鐘面12個(gè)數(shù)字的字體、大小和對(duì)齊方式
          	ctx.font = "30px serif";
          	ctx.textAlign="center";
          	ctx.textBaseline="middle";
          	var kdx,kdy;
          	//繪制12個(gè)大刻度和12個(gè)數(shù)字
          	//為方便計(jì)算,先定義了0-11這12個(gè)刻度對(duì)應(yīng)的度數(shù),也可以直接定義對(duì)應(yīng)的弧度。
          	const hd=Math.PI/180,degr=[270,300,330,0,30,60,90,120,150,180,210,240];
          	for(var i=0;i<12;i++){
          		kdx=oX+Math.cos(hd*degr[i])*(r-3);
          		kdy=oY+Math.sin(hd*degr[i])*(r-3);
          		ctx.beginPath();
          		ctx.arc(kdx, kdy, 6, 0, 2 * Math.PI);//畫(huà)圓形大刻度
          		ctx.fill();
              //繪制刻度對(duì)應(yīng)的數(shù)字
          		ctx.strokeText(i==0? 12 : i,oX+Math.cos(hd*degr[i])*(r-24),oY+Math.sin(hd*degr[i])*(r-24));
          		ctx.closePath();
          	}
          	
          	//繪制小刻度
          	ctx.lineWidth = 2;
          	for(var i=0;i<60;i++){
          		if(i % 5 == 0) continue;//跳過(guò)與刻度重疊的刻度
          		x0=Math.cos(hd*i*6);
          		y0=Math.sin(hd*i*6);
          		ctx.beginPath();
          		ctx.moveTo(oX+x0*(r-10), oY+y0*(r-10)); 
          		ctx.lineTo(oX+x0*r, oY+y0*r); //畫(huà)短刻度線
          		ctx.stroke(); 
          		ctx.closePath();
          	}

          效果如圖:

          鐘面效果圖

          (4)根據(jù)當(dāng)前時(shí)間繪制指針

          習(xí)慣上,時(shí)針粗短,分針略粗而長(zhǎng),秒針細(xì)長(zhǎng)。為加大區(qū)別,示例中秒針細(xì)長(zhǎng)并且繪制成紅色。

          function drawHp(i){//繪制時(shí)針
          	const x0=Math.cos(hd*i*30),y0=Math.sin(hd*i*30);
          	drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
          }
          function drawMp(i){//繪制分針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
          }
          function drawSp(i){//繪制秒針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
          }
          //抽取出繪制三種指針時(shí)共同的部分,注意指針繪制在渲染上下文ctxUI中
          function drawPointer(ox,oy,tx,ty,width,color){
          	ctxUI.strokeStyle = color;
          	ctxUI.lineCap = "round";
          	ctxUI.lineWidth = width;
          	ctxUI.beginPath();
          	ctxUI.moveTo(ox, oy);
          	ctxUI.lineTo(tx,ty);
          	ctxUI.stroke();
          	ctxUI.closePath();
          }

          現(xiàn)在已經(jīng)有了繪制三種指針的方法,參數(shù)是當(dāng)前時(shí)間的時(shí)、分和秒,將根據(jù)它們的值確定指針的坐標(biāo)。不過(guò),因?yàn)槭褂玫氖悄J(rèn)的convas坐標(biāo)體系,0值實(shí)際指向3的位置,需要小小的修正一下。

          window.requestAnimationFrame(function fn(){
          		var d = new Date();
          		ctxUI.clearRect(0,0,oW,oH);
          		//度數(shù)從0開(kāi)始,而0在3刻度(15分/秒位置),修正為全值減15,如果小于0則修正回來(lái)
              var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;
          		hour=hour>11? hour-15 : hour-3;
          		drawHp(hour>=0? hour : 12+hour);
          		drawMp(minute>=0? minute : 60+minute);
          		drawSp(second>=0? second : 60+second);
          		window.requestAnimationFrame(fn);
          });

          接下來(lái),調(diào)用window.requestAnimationFrame,在其中繪制并更新指標(biāo)的位置??纯葱Ч绾危?/p>

          指針繪制情況與實(shí)際時(shí)間相符

          貌似效果有了,截圖時(shí)電腦上的時(shí)間是10時(shí)17分,指針繪制上,時(shí)針指向10時(shí),分針指向17。嗯,感覺(jué)有點(diǎn)別扭?對(duì)了,時(shí)針和分針怎么是端端正正地指向它們的整時(shí)整分刻度上呢?實(shí)際鐘表上時(shí)針和分針是展示動(dòng)態(tài)進(jìn)度的,此時(shí)時(shí)針應(yīng)該越過(guò)10時(shí)的位置才對(duì)。沒(méi)關(guān)系,我們?cè)诶L制時(shí)針和分針時(shí)別點(diǎn)東西,讓它的角度值加上分針和秒針的值試試。

          //修改后的繪制三種指針的方法
          function drawHp(i,f,m){//繪制時(shí)針,參數(shù):時(shí),分,秒
          	const x0=Math.cos(hd*(i+(f/60)+(m/600))*30),y0=Math.sin(hd*(i+(f/60)+(m/600))*30);
          	drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
          }
          function drawMp(i,f){//繪制分針,參數(shù),分,秒
          	const x0=Math.cos(hd*(i+(f/60))*6),y0=Math.sin(hd*(i+(f/60))*6);
          	drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
          }
          function drawSp(i){//繪制秒針
          	const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
          	drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
          }

          再來(lái)看看效果,嗯,立竿見(jiàn)影呀:

          指針指向更合理了

          到此為止,canvas繪制一個(gè)簡(jiǎn)易時(shí)鐘就完成了。下面繼續(xù)優(yōu)化一下。剛才使用requestAnimationFrame方法即時(shí)更新繪制情況。這個(gè)方法與刷新率有關(guān),看看mdn上面怎么說(shuō)的:

          window.requestAnimationFrame() 方法會(huì)告訴瀏覽器你希望執(zhí)行一個(gè)動(dòng)畫(huà)。它要求瀏覽器在下一次重繪之前,調(diào)用用戶提供的回調(diào)函數(shù)。

          對(duì)回調(diào)函數(shù)的調(diào)用頻率通常與顯示器的刷新率相匹配。雖然 75hz、120hz 和 144hz 也被廣泛使用,但是最常見(jiàn)的刷新率還是 60hz(每秒 60 個(gè)周期/幀)。為了提高性能和電池壽命,大多數(shù)瀏覽器都會(huì)暫停在后臺(tái)選項(xiàng)卡或者隱藏的 <iframe> 中運(yùn)行的 requestAnimationFrame()。

          本示例中,更新指針的位置并不需要很高的刷新頻率,可以通過(guò)節(jié)流進(jìn)行一下優(yōu)化:

          var fps = 5, fpsInterval = 1000 / fps,lastTime = new Date().getTime(); //記錄上次執(zhí)行的時(shí)間
          function runStep() {
              requestAnimationFrame(runStep);
              var d=new Date(),now = d.getTime()
              var elapsed = now - lastTime;
              if (elapsed > fpsInterval) {
          				ctxUI.clearRect(0,0,oW,oH);
                  lastTime = now - (elapsed % fpsInterval); 
          			//度數(shù)從0開(kāi)始,而0在3刻度(15分/秒位置),修正為全值-15,如果小于0則用60減回
                  var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;//console.log(d.getSeconds(),second);
                  hour=hour>11? hour-15 : hour-3;
                  drawHp(hour>=0? hour : 12+hour,minute+15,second+15);
                  drawMp(minute>=0? minute : 60+minute,second+15);
                  drawSp(second>=0? second : 60+second);
              }
          }
          runStep();

          當(dāng)然,實(shí)現(xiàn)時(shí)鐘的方法是很多,比如可以使用畫(huà)布的旋轉(zhuǎn)(rotate方法)來(lái)實(shí)現(xiàn)指針的動(dòng)態(tài)轉(zhuǎn)動(dòng)等等。

          完整HTML+JS源碼:


          主站蜘蛛池模板: 天堂va视频一区二区| 亚洲av片一区二区三区| 国产高清视频一区二区| 亚洲一区二区三区首页| www亚洲精品少妇裸乳一区二区 | 国产美女口爆吞精一区二区| 国产精品高清一区二区人妖| 国产福利电影一区二区三区,亚洲国模精品一区 | 日本视频一区在线观看免费| 中文字幕一区二区免费 | 久久久久人妻一区二区三区| 久久精品一区二区| 久久一区二区三区99| 国产情侣一区二区三区| 国产一区二区福利久久| 免费看AV毛片一区二区三区| 亚洲字幕AV一区二区三区四区| 91亚洲一区二区在线观看不卡| 亚洲V无码一区二区三区四区观看 亚洲爆乳精品无码一区二区三区 亚洲爆乳无码一区二区三区 | 国产一区视频在线免费观看| 国产精品视频一区国模私拍| 亚洲变态另类一区二区三区| 亚洲熟妇AV一区二区三区宅男| 亚洲一区二区三区在线网站| 无码国产精品一区二区免费虚拟VR| 精品国产一区二区三区麻豆| 精品国产福利一区二区| 亚洲欧美日韩一区二区三区| 国产日产久久高清欧美一区| 国产一区精品视频| 国精产品一区一区三区免费视频 | 国产成人一区二区三区在线| 国产亚洲情侣一区二区无| 国产一区二区三区在线视頻| 亚洲色欲一区二区三区在线观看| 国精品无码一区二区三区在线| 日韩一区二区在线观看视频| 无码人妻一区二区三区免费| 日本高清天码一区在线播放| 一区二区三区在线观看免费| 日韩精品一区二区三区四区|