JS如何实现倒计时功能,如何防止刷新。

JavaScript023

JS如何实现倒计时功能,如何防止刷新。,第1张

倒计时可以用js的setTimeout来控制

http://www.tocus.com.cn/?send=article_show&id=34&class=2

可以循环计时,而对于页面刷新,我们可以屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键来达到效果

<script>

//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键

function document.oncontextmenu(){event.returnValue=false}//屏蔽鼠标右键

function window.onhelp(){return false} //屏蔽F1帮助

function document.onkeydown(){

if((window.event.altKey)&&((window.event.keyCode==37)||(window.event.keyCode==39))){

//屏蔽Alt+方向键←

//屏蔽Alt+方向键→

event.returnValue=false

}

if((event.keyCode==8)||(event.keyCode==116)||(event.ctrlKey &&event.keyCode==82)){

//屏蔽退格删除键

//屏蔽F5刷新键

//Ctrl+R

event.keyCode=0

event.returnValue=false

}

if(event.keyCode==122){event.keyCode=0event.returnValue=false}//屏蔽F11

if(event.ctrlKey &&event.keyCode==78)event.returnValue=false //屏蔽Ctrl+n

if(event.shiftKey &&event.keyCode==121)event.returnValue=false //屏蔽shift+F10

if(window.event.srcElement.tagName=="A" &&window.event.shiftKey)

window.event.returnValue=false //屏蔽shift加鼠标左键新开一网页

if((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4

window.showModelessDialog("about:blank","","dialogWidth:1pxdialogheight:1px")

return false

}

}

</script>

逻辑如下:

1、先判断两个时间的时间差,当然如果得到的时间是13位时间戳的话你需要转化一下

2、判断时间够一天显示天数,够一小时显示小时数

相关代码:

//获取时间,时间戳转换,不是则不转

var mydate1 = new Date(parseInt(time1.replace("/Date(", "").replace(")/", "")))

var mydate2 = new Date(parseInt(time2.replace("/Date(", "").replace(")/", ""))) 

//获取剩余秒数 

var timerc =dateDiff(mydate, '2015/05/19 10:00:00') / 1000

function dateDiff(date1, date2) {

            var dt1 = new Date(Date.parse(date1))

            var dt2 = new Date(Date.parse(date2))

            try {

                return Math.round((dt2.getTime() - dt1.getTime()))

            }

            catch (e) {

                return e.message

            }

        } 

//循环调用倒计时

  function add() { //加时函数

            --timerc //时间变量自减1

            var day = parseInt(timerc / 86400)

            var hour = parseInt((timerc % 86400) / 3600)

            var min = parseInt((timerc % 3600) / 60)

            var sec = Number(parseInt(timerc % 60 / 10)).toString() + Number(parseInt((timerc % 10))).toString()

            if (day > 0) { //如果不到5分钟

                $("#day").html(day + '天') //写入天数

                $("#hour").html(hour + '时') //写入小时数

                $("#min").html(min + '分') //写入分钟数

                $("#sec").html(sec + '秒') //写入秒数(两位)

            }

            else if (hour > 0) {

                $("#hour").html(hour + '时') //写入小时数

                $("#min").html(min + '分') //写入分钟数

                $("#sec").html(sec + '秒') //写入秒数(两位)

            }

            else if (min > 0) {

                $("#min").html(min + '分') //写入分钟数

                $("#sec").html(sec + '秒') //写入秒数(两位)

            }

            else if (sec != '00') {

                $("#sec").html(sec + '秒') //写入秒数(两位)

            }

            else {

                tiao(activity) return true//时间到0调用函数

            }

            setTimeout("add()", 1000) //设置1000毫秒以后执行一次本函数

        }

望采纳!

JS实现思路也特别简单:获取目标时间和当前时间 =>计算时间差 =>重复计算并渲染到页面

后面渲染的操作只需替换输出控制台的操作即可,这里也简单的实现一下,实现的方法也不止一种。

效果预览图: