ថ្ងៃនេះជាថ្ងៃសីល
សូមអ្នកទាំងអស់គ្នាចូរធ្វើនូវអំពើល្អ

និងរក្សារសីល និងកុំធ្វើបាបអ្នកដទៃ។

Sangkran 2026

របៀបបង្កើតប៊ូតុង Download រាប់ថយក្រោយលើ Blogger | Countdown Timer Button

រៀនរបៀបតម្លើងប៊ូតុងទាញយក (Download Box) ដែលមាននាឡិការាប់ថយក្រោយសម្រាប់ប្លុក Blogger (Blogspot)។ ជំនួយដល់ SEO បង្កើនការចាប់អារម្មណ៍ពីអ្នកអាន និងធ្វើឱ្យ

ការប្រើប្រាស់ប៊ូតុងទាញយកធម្មតា វាហាក់បីដូចជាសាមញ្ញពេកហើយ។ ដើម្បីឱ្យប្លុករបស់បងប្អូនមើលទៅកាន់តែមានលក្ខណៈអាជីព និងទាក់ទាញអ្នកប្រើប្រាស់ឱ្យនៅលើវែបសាយបានយូរ យើងគួរប្រើប្រាស់ Download Box ដែលមាននាឡិការាប់ថយក្រោយ (Countdown Timer)។

របៀបតម្លើង (How to Install)

1 បញ្ចូលកូដ JavaScript (JS)

សូមចម្លងកូដខាងក្រោមនេះ យកទៅដាក់នៅពីលើស្លាក </body> ក្នុង Template របស់បងប្អូន៖

JavaScript
<script type='text/javascript'>
function generate() {
    var e, n = document.getElementById("downloadx"),
        t = document.getElementById("btnx"),
        a = document.getElementById("downloadx").href,
        l = 15, // កំណត់វិនាទីនៅទីនេះ
        d = document.createElement("span");
    n.parentNode.replaceChild(d, n), e = setInterval(function() {
        --l < 0 ? (d.parentNode.replaceChild(n, d), clearInterval(e), window.location.replace(a), n.style.display = "inline") : (d.innerHTML = "<p style='color:#ffc832;'>Please wait " + l.toString() + " seconds...</p>", t.style.display = "none")
    }, 1e3)
}
</script>
2 បន្ថែម CSS សម្រាប់រចនាប្រអប់

សូមចម្លងកូដ CSS នេះយកទៅដាក់ក្នុងផ្នែក <style> ឬពីលើ </b:skin>

CSS Styles
#btnx { cursor:pointer; padding:10px 20px; border:0; border-radius:5px; background:#007fff; color:#fff; font-weight:bold; }
.download_now { display:block; margin:20px auto; border-radius:8px; overflow:hidden; }
.download-now { background:#111; color:#ccc; padding:20px; }
.download-title { color:#fff; font-size:1.2em; }
.file-info { padding:15px; background:#eee; color:#222; font-size:14px; }
#downloadx { padding:10px 20px; border-radius:5px; background:#ffc832; text-decoration:none; color:#222; font-weight:bold; }
3 របៀបប្រើប្រាស់ក្នុងអត្ថបទ

នៅពេលសរសេរអត្ថបទ សូមប្តូរទៅកាន់ HTML View រួចដាក់កូដខាងក្រោមនេះ (កុំភ្លេចប្តូរ Link ក្នុង href)៖

HTML View
<div class="download_now"> 
  <div class="download-now"> 
    <div style="display:flex; justify-content:space-between; align-items:center;"> 
      <div class="download-title">Download File</div> 
      <button onclick="generate()" id="btnx">Download</button> 
      <a id="downloadx" href="ដាក់តំណភ្ជាប់នៅទីនេះ" style="display:none">Get Link</a> 
    </div> 
  </div> 
  <div class="file-info">រៀបចំដោយ៖ Bongsokla</div>
</div>

ចំណាំ៖ បងប្អូនអាចប្តូរលេខ l = 15 ទៅជាចំនួនវិនាទីដែលបងប្អូនចង់ឱ្យអ្នកអានរង់ចាំ។


សង្ឃឹមថាការចែករំលែកនេះនឹងមានប្រយោជន៍សម្រាប់បងប្អូនទាំងអស់គ្នា! បើមានចម្ងល់អាចសួរក្នុង Comment បានណា។

Post a Comment

/*--[ Custom JS SingleItem (placed above ) ]--*/ /*]]>*//**/ /*{let{B64:l,eReg:n,iAE:a,qSel:o,qSell:$,gId:s,cEl:i,aCl:r,aEL:c,gAb:h,sAb:d,mc:p,pl:u}=e,v=a,f=_.location,g="beforebegin",C="afterend",m="sl_step",b="sl_url",S="sl_end",k={set(e,_,l=10){let n=new Date(Date.now()+6e4*l).toUTCString();t.cookie=`${e}=${_}; expires=${n}; path=/`},get(e){let _=t.cookie.match(RegExp(`(?:^|; )${e}=([^;]*)`));return _?_[1]:null},clear(e){t.cookie=`${e}=; Max-Age=0; path=/`}},L=()=>{k.clear(m),k.clear(b),k.clear(S)};if(u.sl.an&&0!==e.length){let M=$(".safeL");for(let w of M){let y=h(w,"href")||h(w,"data-href")||h(w,"data-link");if(y){let V,T={v:1,u:y};try{let B=JSON.stringify(T);try{V=`${_.location.origin}/#s=${e.B64.O3.e(B)}`}catch(H){console.warn("Safelink: Base64 Encoding Failed:",H)}}catch(z){console.warn("Safelink: JSON Stringify Failed:",z)}V&&("A"===w.nodeName?(d(w,"href",V),d(w,"rel","nofollow noreferrer noopener"),u.sl.aNt&&d(w,"target","_blank")):c(w,"click",e=>{e.preventDefault(),u.sl.aNt?_.open(V,"_blank"):f.href=V}))}}}let N=(e=["url","s","u","o"])=>{let _=RegExp(`[?#](${e.map(e=>n(e)).join("|")})=(.*)`),t=f.search.match(_)||f.hash.match(_);if(!t||!t[1])return null;let a=t[2]?decodeURIComponent(t[2].trim()):null;if(!a)return null;try{let o=l.O3.d(a),$={};try{$=JSON.parse(o)}catch(s){}return{valid:!0,value:o,data:$}}catch(i){return null}},x=(e,_,t="s")=>`${e.split(/[?#]/)[0]}`,E=(e=!0,_=!0)=>{let t="sl_top_section",l="sl_bottom_section",n=s(t),a=s(l),$=[n,a];if(!n||!a){let[r,c]=(()=>{let e=o("#Blog01 .post .pInr");if(e)return[[e,g],[e,C]];let _=s("sec_Horizontal-Ad")||s("Blog01"),t=s("sec_Bottom_Widgets")||o("footer.mainF");return[_?[_,g]:null,t?[t,C]:null]})();!n&&r&&(c||adSection)&&($[0]=i("div",{id:t}),e&&v(r[0],r[1],$[0])),!a&&c&&(r||n)&&($[1]=i("div",{id:l}),_&&v(c[0],c[1],$[1]))}return $},A=e=>{let l="/"===f.pathname||f.pathname.match(/^\/(?:index\.html?|index\.htm)?$/i),n=!!N(),a=N()?.data?.u||k.get(b)||null,$=parseInt(k.get(m))||(l&&n?0:1),s=parseInt(u?.sl?.toSteps||3,10),h=parseInt(u?.sl?.cdS||15,10),v=u?.sl?.sCon||[];if($>s&&(L(),$=1),l){if(n||a){if(!n&&a){L();return}n&&($=0)}else{L();return}}else if(!a)return;let[g,C]=E();if(!a||!g||!C||0===e.length)return;if(!l&&(!a||k.get(b)!==a)){L();return}k.set(m,$),k.set(b,a);let S=()=>e[Math.floor(Math.random()*e.length)],M=()=>{let e=i("div",{className:"slRv",innerHTML:`
`}),l=o("button",e);(g||t.body).appendChild(e),u.sl.autoscroll&&e.scrollIntoView({behavior:"smooth",block:"center"});let n=()=>{r(e,"v"),l.disabled=!0,setTimeout(()=>{e.remove(),$=1,k.set(m,$);let t=S(),l=x(t,{v:1,u:a});_.location.href=l},2e3)};c(l,"click",n)},w=()=>{let e=parseInt(v[$-1]?.duration||h,10),l=$===s,n=l?p.goToLink||"Go to Link":p.continue||"Continue",r=i("div",{className:"slCd"}),f=(p.pleaseWaitNSeconds||"Please wait {seconds} Seconds... (Step {B} of {TOTAL_STEPS})").replace("{seconds}",e).replace("{B}",$).replace("{TOTAL_STEPS}",s),b=i("div",{innerText:f});if(r.appendChild(b),r.style.setProperty("--total",`${e}s`),(g||t.body).appendChild(r),u.sl.autoscroll&&setTimeout(()=>{r.scrollIntoView({behavior:"smooth",block:"center"})},50),r.__safelink_timer_started)return;r.__safelink_timer_started=!0;let M=()=>{b.innerText=p.generatingLink||"Generating link...",setTimeout(()=>{try{r.remove()}catch(e){}let h=i("div",{className:"slSd",innerHTML:`${p.safelinkScrollDownMessage.replace("{button_text}",n)} `}),v=o("button",h);(g||t.body).appendChild(h),u.sl.autoscroll&&h.scrollIntoView({behavior:"smooth",block:"center"}),c(v,"click",()=>{try{h.querySelector("button").remove()}catch(e){}let o=i("div",{className:"slGl"}),r=t.createElement("a");r.className="button",r.rel="nofollow noreferrer noopener";let p=l?a:x(S(),{v:1,u:a});r.href=p,r.innerHTML=`${n} `,u&&u.sl&&u.sl.aNt&&d(r,"target","_blank"),o.appendChild(r);let v=i("span",{className:"NextInfo",innerText:`Step ${$} of ${s}`});o.appendChild(v),(C||t.body).appendChild(o),u.sl.autoscroll&&r.scrollIntoView({behavior:"smooth",block:"center"}),c(r,"click",e=>{e.preventDefault(),l?(L(),_.location.href=p):($++,k.set(m,$),_.location.href=p)})})},1e3)},w=e,y=null,V=()=>{let e=(p.pleaseWaitNSeconds||"Please wait {seconds} Seconds... (Step {B} of {TOTAL_STEPS})").replace("{seconds}",w).replace("{B}",$).replace("{TOTAL_STEPS}",s);b.innerText=e},T=()=>{w--,V(),w<=0&&(H(),t.removeEventListener("visibilitychange",z),M())},B=()=>{y||(y=setInterval(T,1e3))},H=()=>{clearInterval(y),y=null},z=()=>{t.hidden?H():B()},N=()=>{V(),t.addEventListener("visibilitychange",z),t.hidden||B()};"complete"===t.readyState?N():c(_.addEventListener?_:"load","load",N)};if(l)0===$&&M();else if($>=1&&$<=s)w();else{L();let y=x(_.location.origin+"/",{v:1,u:a});_.location.href=y}},F=e=>{var _,l;return l=e.replace(/(^\w+:|^)/,""),new URL(l,t.baseURI)},I=(u.sl.pg||[]).map(_=>new URL(_,e.bg.cnHmU).href);e.iBF?e.iBF().then(async _=>{let t=u.sl.pg.map(_=>new URL(_,e.bg.cnHmU).href),l=[];try{let n=new _(F(e.bg.cnHmU)),[a,o]=await Promise.all([n.posts.list(),n.pages.list()]);a&&a.length>0&&(l=l.concat(a.map(e=>e.url))),o&&o.length>0&&(l=l.concat(o.map(e=>e.url))),0===l.length&&(l=t)}catch($){console.warn("Safelink: Failed to fetch recent posts/pages, falling back to manual config.",$),l=t}A(l)}).catch(e=>{console.warn("Safelink: e.iBF() failed, falling back to manual config.",e),A(I)}):A(I)})(PU,window,document); /*]]>*/