JSFiddle - React, Tailwind, and code Playground

by twobin

HTML

<div class='mod-spm'data-spmid='123'>
        <div class='child_a'></div>
        <div class='child_b'></div>
        <div class='child_c'></div>
        <div class='child_d'></div>
    </div>
    <div class='mod-spm' data-spmid='456'>
        <div class='child_a'></div>
        <div class='child_b'></div>
        <div class='child_c'></div>
        <div class='child_d'></div>
    </div>
    <div class='mod-spm' data-spmid='789'>
        <div class='child_a'></div>
        <div class='child_b'></div>
        <div class='child_c'></div>
        <div class='child_d'></div>
    </div>

CSS

.mod-spm{
    height:100px;
    background:red;
    margin:2px;
}

JavaScript

function bind(elem, type, fn) {
    var newfn = function () { fn.apply(elem, arguments); };
    if (elem.addEventListener) {
        elem.addEventListener(type, newfn, false);
    } else {
        elem.attachEvent("on" + type, newfn);
    }
    return newfn;
}
Array.prototype.forEach.call(document.getElementsByClassName('mod-spm'),function(elem, index){
    var totalTime = 0; //ms
    var spmid = elem.getAttribute('data-spmid');
    var enterTime, leaveTime;    
    var testDivShowTotalTime = document.createElement('div');    
    
    function showStayTime(){
        var msg;
        msg = 'mod-spm[data-spmid="'+spmid+'"] 總停留時間:' + totalTime + 'ms';
        testDivShowTotalTime.innerText = msg;
    }    
    elem.appendChild(testDivShowTotalTime);
    bind( elem, 'mouseenter', function(){
        enterTime = new Date();
    });
    
    bind( elem, 'mouseleave', function(){
        totalTime += new Date().getTime() - enterTime.getTime();
        
        showStayTime();
    });
    
    showStayTime();
});