无法添加两个字符串(+=操作)

Can not add two String ( += operation )

本文关键字:操作 字符串 两个 添加      更新时间:2023-09-26

我正在做一个项目,让用户鼠标滚轮移动,并知道它向上或向下滚动。在我的代码中,我可以上下移动。但我想把动作保存到字符串中。例如,如果用户向上向上向下滚动"mhmh"显示返回"UUD",但现在它只得到最后一个移动(只有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>

你可以在这里浏览网页样本。怎么了?

问题是每次调用事件处理程序时都要重新定义mhmh。这就是闭包派上用场的地方。将mhmh变量存储在事件处理程序上下文之外:

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)

只需将变量mhmh作为全局变量

`

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)

`

您的变量"mhmh"在函数的本地作用域中,它总是被重置。将其设置为函数外的全局变量,然后可以连接鼠标移动并在需要时重置变量。