តើ «ហេតុការណ៍» ជា​អ្វី​ទៅ? យោង​តាម​និយម​ន័យ​ទូទៅ «ហេតុការណ៍​»​ (event) គឺ​ជា​រឿងរ៉ាវ​ទាំងឡាយ​ណា​ដែល​កើតមាន​ឡើង​ដោយ​មិន​បាន​ដឹង​ជា​មុន​ ឧទាហរណ៍​ដូចជា​ ការត្រូវ​ឆ្នោត ការជួប​មិត្ត​សំលាញ់ចាស់​​ជា​ចៃដន្យ​ជា​ដើម​​​។

 

ទន្ទឹម​នឹង​នេះ​ មាន​របៀប​ជា​ច្រើន​​នៅ​ក្នុង​ការសរសេរ​កម្មវិធី​កំព្យូទ័រ ហើយ​ក្នុង​ចំណោម​របៀប​ទាំងនោះ​ មាន​របៀបសរសេរ​​កម្មវិធី​ម៉្យាង​​ហៅ​ថា Event-Driven Programming ​ដែល​អាច​ត្រូវ​បក​ប្រែ​ជា​ភាសា​ខ្មែរ​មក​ថា ការសរសរកម្មវិធី​ដោយ​យោង​​លើ​​ «ហេតុការណ៍» ឬ​​អាច​និយាយ​បាន​ម៉្យាង​ទៀត​ថា កម្មវិធី​មាន​ដំណើរ​ការ​អាស្រ័យ​ទៅ​លើ​ «ហេតុការណ៍» ផ្សេង​​ៗ​ដែល​កើត​មាន​ឡើង​ដោយ​សារ​អ្នក​ប្រើប្រាស់​កម្មវិធី​ចុច​នេះ​ឬ​ចុច​នោះ​។

 

សំរាប់​អ្នកប្រើប្រាស់​កម្មវិធី​កំព្យូទ័រនិទូរស័ព្ទ​ដៃ រឿង​នេះ​មិន​មែន​ជា​រឿង​ថ្មី​នោះទេ គឺ​ជា​ទំលាប់​របស់​ពួក​គេ​ទៅ​ហើយ​នូវ​ការចុចនេះឬ​​ចុច​នោះ​ដើម្បី​ចង់​បើក​មើល​អ្វី​ម៉្យាង​នោះ​។ ក៏​ប៉ុន្តែ​ សំរាប់​អ្នក​សរសេរ​កម្មវិធី​សំរាប់​ឧបករណ៍​អេឡិចត្រូនិក នៅ​ពេល​ដែល​អ្នក​ប្រើប្រាស់​​ចុច​នេះ​ឬ​ចុច​នោះ​ គឺ​ជា​ការបង្កើត​ «ហេតុការណ៍» ផ្សេង​ៗ​អោយ​កើត​មាន​ឡើង​​នៅ​ក្នុង​កម្មវិធី​។

 

ដូចនេះ នៅ​ពេលដែល​អ្នក​ប្រើប្រាស់​ចុច​អ្វី​ម៉្យាង «ហេតុការណ៍» មួយ​នឹង​កើត​មាន​ឡើង ហើយ​កម្មវិធី​កំព្យូទ័រនិង​ទូរស័ព្ទ​ដៃ​​នឹង​ដំណើរការ​​រួច​​​ផ្តល់​នូវ​លទ្ធផលអ្វី​ម៉្យាង​ដែរ​ ដើម្បី​ឆ្លើយ​តប​ទៅ​នឹង «ហេតុការណ៍» ដែល​បាន​កើត​​មាន​ឡើង​នោះ​។ សរុបមក ការសរសេរ​កម្មវិធី​​ដើម្បី​ឆ្លើយ​តប​ទៅ​នឹង​ការចុច​ផ្សេង​ៗ​របស់​អ្នក​ប្រើប្រាស់​ ហៅ​ថា ការសរសេរ​កម្មវិធី​ដោយ​យោង​លើ​ «ហេតុការណ៍»

 

មួយវិញ​​ទៀត សំរាប់​កម្មវិធី​កំព្យូទ័រ​និង​ទូរស័ព្ទ​ដៃ «ហេតុការណ៍» មិន​មែន​កើតឡើង​ដោយសារ​​តែ​អ្នក​ប្រើប្រាស់ចុច​នេះ​ឬ​ចុចនោះ​តែ​មួយ​មុខ​នោះ​ទ កម្មវិធី​ខ្លួន​ឯង​ក៏​អាច​បង្កើត​​នូវ​ «ហេតុការណ៍» ផ្សេង​ៗ​បាន​ដែរ​​។ ជាក់ស្តែង នៅ​​ពេលដែល​​ប្រដាប់​មើល​វីដេអូ YouTube ចាប់ផ្តើម​ដំណើរការ វា​នឹង​បង្កើត​នូវ «ហេតុការណ៍» មួយ​ហៅ​ថា «YT.PlayerState.PLAYING» ដែល​យើង​អាច​សរសេរ​កម្មវិធី​មួយ​ចំនួន​អោយ​ដំណើរការ ដើម្បី​ឆ្លើយ​តប​ទៅ​នឹង​ហេតុការណ៍ «YT.PlayerState.PLAYING»​ នេះ​។

 

ឧបមា​ថា នៅ​ពេល​ដែល​ប្រដាប់​មើល​វីដេអូ YouTube ចាប់​ផ្តើម​ដំណើរការ ដែល​ជា​កត្តា​ធ្វើ​អោយ​​​ហេតុការណ៍ «YT.PlayerState.PLAYING» កើត​មានឡើង​ យើង​ចង់​អោយ​ browser ដូរ​ពណ៌​ទៅ​ជា​​ខ្មៅ​ជា​ស្វ័យប្រវត្តិ ដើម្បី​អាច​មើល​វីដេអូ​ដោយ​មិន​ចាំង​ភ្នែក​។ ដើម្បី​សំរេច​បាន​គោល​បំណង​នេះ យើងត្រូវ​​សរសេរ​កម្មវិធី​ដូច​ខាង​ក្រោម​នេះ៖

 

<style>
/*កូដ​ខាង​ក្រោម​នេះ គឺ​ជា​ css ចាំបាច់សំរាប់​រចនា​ menu នៅខាង​ក្រោម
ដែលនៅ​ក្នុង​នោះមាន​ពក្យ​ថា «លេង» «សំរាក» និង «ឈប់​»។*/
ul{
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
}
 
li {
  float: left;
}
 
li a {
  display: block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}
 
li a:hover{
  background-color: #111;
  cursor:pointer;
}
</style>

 

<!--ធាតុ div ទាំងពីរខាង​ក្រោម​នេះ គឺជា​ធាតុ​ចាំបាច់​​សំរាប់​បង្កើត​ប្រដាប់​ចាក់វីដេអូ YouTube ថ្មីមួយ​ 
ដែល​មាន​​អត្តសញ្ញាណជា​ «player»។-->
<div style="position:relative;padding-top:56.25%;">
  <div id="player" style="position:absolute;top:0;left:0;"></div>
</div>
 
<!--បណ្តា​ធាតុ​ខាង​ក្រោម​នេះ គឺ​ជា​ការបង្កើត​ menu សំរាប់​ ចាក់ សំរាក និង បញ្ឍប់​វីដេអូ ។-->
<ul>
  <li><a onclick="play()">លេង</a></li>
  <li><a onclick="pause()">សំរាក</a></li>
  <li><a onclick="stop()">ឈប់</a></li>
</ul>
 
<script>
  /*កូដ​​ខាង​ក្រោមនេះ គឺ​ជាការ​ចំលង​យក​ក្បួន​ខ្នាត​សំខាន់​ៗ​នៅ​
  នៅ​ក្នុង​ប្រព័ន្ធ​ YouTube យកមកប្រើ​ទាក់ទង​នឹង​ប្រដាប់​ចាក់​វីដេអូ*/
  var tag = document.createElement('script');
  tag.src = "https://www.youtube.com/iframe_api";
  var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
 
  /*កូដ​ខាង​ក្រោម​នេះ គឺ​ជាការយក្បួន​ខ្នាត​​នៅ​ក្នុង​ប្រព័ន្ធ​ YouTube
  យក​មក​បង្កើត​ប្រដាប់​ចាក់​វីដេអូ​ថ្មី​មួយ​ដាក់​ចូល​ទៅ​ក្នុង​ធាតុ​ដែល​មាន​
  អត្តសញ្ញាណ​ជា «player» នៅ​ខាង​លើ​។*/
  var player;
  function onYouTubeIframeAPIReady(){
    player = new YT.Player('player', {
      height: '100%',
      width: '100%',
      videoId: 'M7lc1UVf-VE',
      playerVars: {
        controls: 0
      },
      events: {
        /*ការតភ្ចាប់​ហេតុការណ៍ «onStateChange» កើត​ឡើង​ពី​ការផ្លាស់​សភាព​លក្ខណៈ​
        របស់​ប្រដាប់​មើល​វីដេអូ YouTube​ ទៅ​នឹង​ក្បួន​ «onPlayerStateChange» ។*/
        'onStateChange': onPlayerStateChange
      }
    });
  }
 
  /*ក្បួន «onPlayerStateChange»​ ដែល​នឹង​ត្រូវ​យកទៅ​ប្រើជា​ស្វ័យ​ប្រវត្តិ 
​​  នៅ​ពេល​ដែល​​ហេតុការណ៍ «onStateChange»​ កើត​មាន​ឡើង*/
  function onPlayerStateChange(event) {
    if(event.data == YT.PlayerState.PLAYING){
      /*បើ​ប្រដាប់មើលវីដេអូ​មាន​មាន​សភាព​ជា​កំពុង​លេង
      បញ្ជា​នៅខាង​ក្រោម​នេះ​នឹង​យក​ទៅ​អនុវត្ត​។*/
      $('.main-outer').css("background-color","black");
    }else if(event.data == YT.PlayerState.PAUSED){
      /*បើ​ប្រដាប់មើលវីដេអូ​ស្ថិត​ក្នុង​សភាព​សំរាក
      បញ្ជា​​នៅខាង​ក្រោម​នេះ​នឹង​យក​ទៅ​អនុវត្ត​។*/
      $('.main-outer').css("background-color","#ffffff");
    }else if(event.data == YT.PlayerState.ENDED){
      /*បើ​ប្រដាប់មើលវីដេអូ​មាន​មាន​សភាព​ជា​លេង​ចប់
      បញ្ជា​​នៅខាង​ក្រោម​នេះ​នឹង​យក​ទៅ​អនុវត្ត​។*/
      $('.main-outer').css("background-color","#ffffff");
    }
  }
 
  /*ក្បួន​ទាំងបី​ខាង​ក្រោម​នេះ ប្រើ​សំរាប់​ឆ្លើយ​តប​
  ទៅ​នឹង​ការចុច​ menu ដែលជា​​ពាក្យថា «លេង» «សំរាក» និង «ឈប់» ។*/
  function stop(){
    player.stopVideo();
  }
 
  function play(){
    player.playVideo();
  }
 
  function pause(){
    player.pauseVideo();
  }
</script>

 

តំណរភ្ជាប់​ទៅ​កាន់​កម្មវិធី​សរសេរ​ឡើង​ដោយ​កូដ​ខាង​លើៈ

https://www.khmerweb.app/2019/03/youtube_16.html

 

នៅ​បន្ទាត់​លេខ 37​ ការសរសេរ​ថា 'onStateChange': onPlayerStateChange គឺ​ជាការភ្ជាប់​ហេតុការណ៍​ «onStateChange» ទៅ​នឹង​ក្បួន​ «onPlayerStateChange» ។ ដូចនេះ​នៅ​ពេល​ដែល​ប្រដាប់​មើល​វីដេអូ YouTube ផ្លាស់​ប្តូរ​សភាព​​របស់​វា ហេតុការណ៍ «onStateChange» នឹង​កើត​មាន​ឡើង​ជា​ស្វ័យ​ប្រវត្តិ ដែល​នឹង​ជា​ហេតុ​បណ្តាល​អោយ​ក្បួន​ឈ្មោះ «onPlayerStateChange» នេះ​ នឹង​ត្រូវ​យក​ទៅ​ប្រើ​ជា​ស្វ័យ​ប្រវត្តិដែរ​។

 

ក្នុង​ករណី​​ប្រដាប់​មើល​វិដេអូ​ផ្លាស់​ប្តូរសភាព​​របស់​វាទៅ​ជា​​សភាព​កំពុងលេង ដែលមាន​តំលៃ​ស្មើ​នឹង YT.PlayerState.PLAYING បញ្ជា​នៅបន្ទាត់​លេខ 48 នឹង​ត្រូវ​យក​ទៅ​អនុវត្ត ដែល​នឹង​ធ្វើ​អោយ​ផ្ទៃ​របស់​ browser ប្រែ​ពណ៌​ជា​ខ្មៅ​​។

 

ក្នុង​ករណី​​ប្រដាប់​មើល​វិដេអូ​ផ្លាស់​ប្តូរ​សភាព​​របស់​វាទៅ​ជា​​សភាព​សំរាក ដែលមាន​តំលៃ​ស្មើ​នឹង YT.PlayerState.PAUSE បញ្ជា​នៅបន្ទាត់​លេខ 52 នឹង​ត្រូវ​យក​ទៅ​អនុវត្ត ដែល​នឹង​ធ្វើ​អោយ​ផ្ទៃ​របស់​ browser ប្រែ​ពណ៌​ជាស​វិញ​។

 

ក្នុង​ករណី​​ប្រដាប់​មើល​វិដេអូ​ផ្លាស់​ប្តូរ​សភាព​​របស់​វាទៅ​ជា​​សភាព​លេង​ចប់ ដែលមាន​តំលៃ​ស្មើ​នឹង YT.PlayerState.ENDED បញ្ជា​នៅបន្ទាត់​លេខ 56 នឹង​ត្រូវ​យក​ទៅ​អនុវត្ត ដែល​នឹង​ធ្វើ​អោយ​ផ្ទៃ​របស់​ browser ប្រែ​ពណ៌​ជា​ស​វិញ​​។