Reputation: 100
I'm working on a project to get user mouse wheel movement and know it scrolls up or down. In my code I'm OK to get up and down movement. But I want to save movements to a string. For example if user scroll UP UP DOWN 'mhmh' show return "UUD" but now it just get last movement ( just U o D)
<script type="text/javascript">
function displaywheel(e){
var evt=window.event || e //equalize event object
var delta=evt.detail? evt.detail*(-120) : evt.wheelDelta
//check for detail first so Opera uses that instead of wheelDelta
var mhmh = ''
var t = ''
//mhmh = (delta<=-120)? mhmh + 'D' : mhmh + 'U'
if (delta<=-120)
t = "d"
else
t = "u"
mhmh = mhmh + t
document.getElementById("wheelvalue").innerHTML= mhmh //delta returns +120 when wheel is scrolled up, -120 when down
}
var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x
if (document.attachEvent) //if IE (and Opera depending on usesr setting)
document.attachEvent("on"+mousewheelevt, displaywheel)
else if (document.addEventListener) //WC3 browsers
document.addEventListener(mousewheelevt, displaywheel, false)
</script>
You can sample web page here. Whats the problem?
Upvotes: 2
Views: 44
Reputation: 11122
Your variable 'mhmh' is in the local scope of the function, it is always being reset. Make it global outside of the function, you can then concatenate mouse movement and reset the variable when needed.
Upvotes: 0
Reputation: 824
just make the variable mhmh as a global variable
`
var mhmh = '';
function displaywheel(e){
var evt=window.event || e //equalize event object
var delta=evt.detail? evt.detail*(-120) : evt.wheelDelta
//check for detail first so Opera uses that instead of wheelDelta
var t = ''
//mhmh = (delta<=-120)? mhmh + 'D' : mhmh + 'U'
if (delta<=-120)
t = "d"
else
t = "u"
mhmh = mhmh + t
document.getElementById("wheelvalue").innerHTML= mhmh //delta returns +120 when wheel is scrolled up, -120 when down
}
var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x
if (document.attachEvent) //if IE (and Opera depending on usesr setting)
document.attachEvent("on"+mousewheelevt, displaywheel)
else if (document.addEventListener) //WC3 browsers
document.addEventListener(mousewheelevt, displaywheel, false)
`
Upvotes: 0
Reputation: 16685
The problem is that you are redefining mhmh
each time the event handler is called. This is where closures come in handy. Store your mhmh
variable outside of the event handler context:
var mhmh = '';
function displaywheel(e){
var evt=window.event || e //equalize event object
var delta=evt.detail? evt.detail*(-120) : evt.wheelDelta
//check for detail first so Opera uses that instead of wheelDelta
var t = ''
//mhmh = (delta<=-120)? mhmh + 'D' : mhmh + 'U'
if (delta<=-120)
t = "d"
else
t = "u"
mhmh = mhmh + t
document.getElementById("wheelvalue").innerHTML= mhmh //delta returns +120 when wheel is scrolled up, -120 when down
}
var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x
if (document.attachEvent) //if IE (and Opera depending on usesr setting)
document.attachEvent("on"+mousewheelevt, displaywheel)
else if (document.addEventListener) //WC3 browsers
document.addEventListener(mousewheelevt, displaywheel, false)
Upvotes: 2