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 亚洲电影在线观看,国产全黄三级播放,精品久久在线观看

          整合營銷服務(wù)商

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

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

          Wordpress建站教程:顯示文章更新修改時(shí)間的方

          Wordpress建站教程:顯示文章更新修改時(shí)間的方法

          者:悅?cè)粀ordpress建站(悅?cè)唤ㄕ荆?/p>

          (此處已添加小程序,請(qǐng)到客戶端查看)

          ?繼續(xù)分享wordpress建站教程。默認(rèn)情況下wordpress文章都會(huì)顯示發(fā)布時(shí)間,但是我們的文章發(fā)布之后可能會(huì)進(jìn)行一下修改,而修改的時(shí)間是不會(huì)顯示的,系統(tǒng)還是以當(dāng)初發(fā)布的時(shí)間為準(zhǔn)。


          如果你的網(wǎng)站文章內(nèi)容有時(shí)效性,或者是經(jīng)常發(fā)布一些活動(dòng)內(nèi)容,那么讓文章顯示更新修改時(shí)間可能會(huì)有更好的用戶體驗(yàn),下面就給大家分享一下方法。


          使用插件


          這里給大家推薦一個(gè)wordpress插件——WP Last Modified Info



          WP Last Modified Info下載地址

          https://downloads.wordpress.org/plugin/wp-last-modified-info.1.7.7.zip


          ?這個(gè)插件是英文版的,但是基本不影響我們使用,你可以在設(shè)置時(shí)使用谷歌翻譯,設(shè)置好之后保存即可。這個(gè)插件可能對(duì)有些wordpress模板主題不支持,此時(shí)你可能需要使用代碼進(jìn)行調(diào)整,具體情況可以問問主題開發(fā)者。


          使用代碼


          第一個(gè)方法是使用代碼,這里給大家分享一段可以實(shí)現(xiàn)這個(gè)效果的代碼


          function my_last_updated_date( $content ) {
          	$u_time=get_the_time( 'U' );
          	$u_modified_time=get_the_modified_time( 'U' );
          	$custom_content='';
          	if ( $u_modified_time >=$u_time + 86400 ) {
          		$updated_date=get_the_modified_time( 'Y-m-j h:s a' );
          		$custom_content .='<p class="last-updated entry-meta">最后更新 ' . $updated_date . '</p>';
          	}
          	$custom_content .=$content;
           
          	return $custom_content;
          }
           
          add_filter( 'the_content', 'my_last_updated_date' );
          


          把上面的代碼添加到你當(dāng)前wordpress主題模板的functions.php文件中,保存,然后文章就可以顯示最后修改更新的時(shí)間了。


          .last-updated {
              font-size: small;
              text-transform: uppercase;
              background-color: #fffdd4;
          }


          我們也可以對(duì)這個(gè)時(shí)間顯示自定議一個(gè)顯示樣式,可以參考上面的CSS代碼,添加到主題CSS,你也可以參考這段代碼自由發(fā)揮,比如可以修改字體顏色。


          總結(jié)


          本次wordpress建站教程結(jié)束,這里分享的是一個(gè)比較小眾的功能需求,一般的企業(yè)網(wǎng)站建設(shè)可能并不需要這個(gè)功能,大家按需添加即可,真的有需要才用,沒必要的功能盡量不要添加。

          么是Canvas

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

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

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

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

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

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

          <!doctype html>
          <html lang="zh-cn">
          <head><title>Canvas繪制動(dòng)畫時(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è)不是更簡單嗎?),一個(gè)用于繪制鐘面,一個(gè)根據(jù)當(dāng)前時(shí)間實(shí)時(shí)顯示和更新時(shí)針、分針和秒針的動(dòng)態(tài)指向。好了,話不多說,開干。

          繪制鐘面刻度

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

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

          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");//指針容器上下文,后面代碼要用
          //定義畫布寬度和高度,時(shí)鐘圓直徑,并設(shè)置畫布大小
          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)畫鐘的邊框,為了好看,這里畫兩個(gè)圈:

           //畫出時(shí)鐘外圓框
            ctx.lineWidth=12;
          	ctx.beginPath();
          	ctx.arc(oX, oY, r+14, 0, 2 * Math.PI);
          	ctx.stroke();
          	ctx.closePath();
          	ctx.lineWidth=8;
          	//畫出時(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開始,它們的度數(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ù)弧度。可以使用Math.PI/180*角度來轉(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);//畫圓形大刻度
          		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;//跳過與刻度重疊的刻度
          		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); //畫短刻度線
          		ctx.stroke(); 
          		ctx.closePath();
          	}

          效果如圖:

          鐘面效果圖

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

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

          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)。不過,因?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開始,而0在3刻度(15分/秒位置),修正為全值減15,如果小于0則修正回來
              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);
          });

          接下來,調(diào)用window.requestAnimationFrame,在其中繪制并更新指標(biāo)的位置。看看效果如何:

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

          貌似效果有了,截圖時(shí)電腦上的時(shí)間是10時(shí)17分,指針繪制上,時(shí)針指向10時(shí),分針指向17。嗯,感覺有點(diǎn)別扭?對(duì)了,時(shí)針和分針怎么是端端正正地指向它們的整時(shí)整分刻度上呢?實(shí)際鐘表上時(shí)針和分針是展示動(dòng)態(tài)進(jìn)度的,此時(shí)時(shí)針應(yīng)該越過10時(shí)的位置才對(duì)。沒關(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");
          }

          再來看看效果,嗯,立竿見影呀:

          指針指向更合理了

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

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

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

          本示例中,更新指針的位置并不需要很高的刷新頻率,可以通過節(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開始,而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í)鐘的方法是很多,比如可以使用畫布的旋轉(zhuǎn)(rotate方法)來實(shí)現(xiàn)指針的動(dòng)態(tài)轉(zhuǎn)動(dòng)等等。

          完整HTML+JS源碼:

          網(wǎng)頁開發(fā)中,跟蹤用戶與多媒體內(nèi)容(如視頻)的互動(dòng)是一項(xiàng)常見需求。無論是教育平臺(tái)、數(shù)據(jù)分析,還是用戶參與度統(tǒng)計(jì),監(jiān)控用戶如何觀看視頻內(nèi)容都能提供寶貴的見解。這篇文章將探索如何使用JavaScript實(shí)現(xiàn)視頻播放時(shí)長的跟蹤。

          目標(biāo)

          我們的目標(biāo)是跟蹤用戶觀看視頻的總時(shí)長,包括暫停的時(shí)間,并將這些信息更新到后臺(tái)系統(tǒng)。我們將通過捕獲播放、暫停和結(jié)束等事件來計(jì)算觀看時(shí)間。

          實(shí)現(xiàn)步驟

          讓我們來分解一下實(shí)現(xiàn)的關(guān)鍵方面:

          1. HTML結(jié)構(gòu)

          我們將使用HTML5的<video>標(biāo)簽將視頻嵌入到網(wǎng)頁中。每個(gè)視頻元素都將有一個(gè)唯一的標(biāo)識(shí)符,以便在JavaScript中輕松訪問。

          <!DOCTYPE html>
          <html lang="en">
            <head>
              <meta charset="UTF-8" />
              <meta name="viewport" content="width=device-width, initial-scale=1.0" />
              <title>視頻播放時(shí)長跟蹤</title>
            </head>
            <body>
              <!-- 視頻容器 -->
              <video id="video_content1" width="640" height="360" controls>
                <!-- 視頻源 -->
                <source src="your_video_source.mp4" type="video/mp4" />
              </video>
          
              <!-- 包含JavaScript代碼 -->
              <script src="your_script.js"></script>
            </body>
          </html>

          2. JavaScript實(shí)現(xiàn)

          在JavaScript文件(your_script.js)中,我們將處理視頻事件并計(jì)算總的觀看時(shí)間。

          // 獲取視頻元素
          let videoMat="your_video_source.mp4";
          let source=document.createElement('source');
          let video=document.getElementById('video_content1');
          
          // 設(shè)置視頻源
          source.src=videoMat;
          source.type='video/mp4';
          
          // 將源附加到視頻元素
          if (video) {
            video.appendChild(source);
          
            // 初始化變量
            let startTime=null;
            let lastUpdateTime=null;
            let totalElapsedTime=0;
          
            // 'play'事件監(jiān)聽器
            video.addEventListener('play', function () {
              startTime=new Date();
              lastUpdateTime=startTime;
              console.log('視頻正在播放。開始時(shí)間:', startTime);
            });
          
            // 'timeupdate'事件監(jiān)聽器
            video.addEventListener('timeupdate', function () {
              if (!video.paused && startTime !==null) {
                const currentTime=new Date();
                const elapsedSinceLastUpdate=(currentTime - lastUpdateTime) / 1000;
                totalElapsedTime +=elapsedSinceLastUpdate;
                lastUpdateTime=currentTime;
                console.log("從開始到現(xiàn)在的觀看時(shí)間: " + totalElapsedTime + " 秒");
              }
            });
          
            // 'pause'事件監(jiān)聽器
            video.addEventListener('pause', function () {
              // 僅當(dāng)視頻已在播放時(shí)存儲(chǔ)暫停時(shí)間
              if (startTime !==null) {
                const pausedTime=video.currentTime;
                console.log('視頻已暫停。暫停時(shí)刻:', pausedTime);
                checkAndUpdateItem(totalElapsedTime, 1, 'your_video_title');
              }
            });
          
            // 'ended'事件監(jiān)聽器
            video.addEventListener('ended', function () {
              // 視頻播放已結(jié)束
              checkAndUpdateItem(totalElapsedTime, 1, 'your_video_title');
            });
          
            // 'play'事件監(jiān)聽器(從暫停時(shí)間繼續(xù)播放)
            video.addEventListener('play', function () {
              // 如果視頻之前暫停,繼續(xù)從暫停時(shí)刻播放
              if (startTime !==null) {
                video.currentTime=video.currentTime;
              }
            });
          }

          解釋

          1. HTML結(jié)構(gòu):我們使用<video>標(biāo)簽嵌入視頻,并提供一個(gè)唯一標(biāo)識(shí)符(video_content1)以便在JavaScript中訪問。我們?cè)赽ody末尾包含JavaScript文件,以確保DOM加載完成后再運(yùn)行腳本。
          2. JavaScript實(shí)現(xiàn)
          • 我們動(dòng)態(tài)設(shè)置視頻源。
          • 設(shè)置了播放、時(shí)間更新、暫停和結(jié)束事件的監(jiān)聽器。
          • 在‘play’事件中,我們捕獲開始時(shí)間和最后更新時(shí)間。
          • 在‘timeupdate’事件中,我們不斷計(jì)算自上次更新以來的觀看時(shí)間。
          • 視頻暫停時(shí),我們存儲(chǔ)暫停時(shí)間并更新后臺(tái)。
          • ‘ended’事件表示視頻播放結(jié)束。

          結(jié)論

          實(shí)現(xiàn)視頻播放時(shí)長的跟蹤可以增強(qiáng)用戶分析,提供有關(guān)用戶參與度和內(nèi)容受歡迎程度的見解。這里提供的JavaScript代碼為您集成視頻跟蹤到網(wǎng)頁應(yīng)用中提供了基礎(chǔ)。

          記得將‘your_video_source.mp4’‘your_video_title’替換為實(shí)際的視頻源和標(biāo)題。

          祝您編碼愉快!


          主站蜘蛛池模板: 在线视频精品一区| 极品少妇一区二区三区四区| 国产在线观看91精品一区| 精品一区二区三区在线观看l | 国产精品一区视频| 亚洲AV无码一区二区三区鸳鸯影院 | 国产成人无码精品一区二区三区| 国产成人无码AV一区二区在线观看 | 精品久久国产一区二区三区香蕉 | 国产婷婷色一区二区三区深爱网| 视频在线一区二区| 亚洲熟女www一区二区三区| 老鸭窝毛片一区二区三区| 人妻AV一区二区三区精品| 波多野结衣中文一区二区免费| 亚洲日本va午夜中文字幕一区| 国产一区风间由美在线观看| 国产91久久精品一区二区| 日本一区二区在线| 亚洲一区二区三区偷拍女厕| 久久精品人妻一区二区三区 | 无码一区二区波多野结衣播放搜索| 国产一区三区二区中文在线| 日韩在线视频一区二区三区| 亚洲欧美国产国产一区二区三区 | 国产精品一区二区av不卡| 波多野结衣一区二区| 中日韩一区二区三区| 国产SUV精品一区二区88L| 91video国产一区| 在线精品亚洲一区二区小说| 日本一区二区三区不卡视频中文字幕| 丝袜美腿高跟呻吟高潮一区| 亚洲一区AV无码少妇电影| 人妻体体内射精一区二区| 成人无码AV一区二区| 肥臀熟女一区二区三区| 91精品一区二区综合在线| 在线免费视频一区| 中文字幕色AV一区二区三区 | 国产在线一区二区三区|