为了账号安全,请及时绑定邮箱和手机立即绑定

怎么在一个函数里控制一个按钮鼠标悬浮,离开,点击这3种状态呢?

怎么在一个函数里控制一个按钮鼠标悬浮,离开,点击这3种状态呢?

错过了年华 2017-07-29 23:47:12
就是如果一个个的设onclick这些不是很麻烦吗,所以我就想能不能只调用一个函数就可以完成好几种变化,点击背景颜色改变这类样式变化。
查看完整描述

7 回答

已采纳
?
沈流舒

TA贡献5条经验 获得超0个赞

建议你去《JavaScript高级程序设计》中看下什么是重载;

如果你不想看,那么推荐你使用jQuery,在JQ中有一个函数叫做jQ.on();

方法的使用:

$('选择器').on({

    'click':function(){

         //在这里执行你的点击操作

     },

    'mouseover':function(){

        //在这里执行你的鼠标移入的操作

     },

    'mouseout':function(){

        //在这里执行你的鼠标移出操作

    }

});

查看完整回答
反对 回复 2017-07-30
  • 沈流舒
    沈流舒
    补充一下,这个跟重载没什么关系,举个例子:当你一个元素有两次或两次以上的onclick事件的触发,这个时候就需要用到重载,重载就是不让你的下文代码覆盖上文的代码,例如你对同一个函数写了两次click事件,实际上只能触发一次click事件,就是你后书写的那个click事件,这个是重载,而你说的这个跟重载没什么关系,mouseover、mouseout、click这三个事件并不冲突,所以你把他们单独的拿出来分别写也是可以的;
?
跨越七海的_风

TA贡献25条经验 获得超5个赞

你说的这种需求,策略模式是一种很好的应对,但是对于业务的扩展来说,有些时候还是不足的。

首先,一楼的说法必须得以来jQuery,在不依赖jQuery的前提下

我给出我的做法吧。

HTMLDOcument.prototype.getElementsByAttribute=function(attr){

    var result=[];
    
    var eles=document.getElementsByTagName("*");
    
    for(var i=0;i<eles.length;i++){
        if(eles[i].hassAttribute(attr)){
            results.push(eles[i]);
        }
    }
    
    return results;
};

function strategyMethodBind=function(srcElem,eventTypes){

    for(var item in eventTypes){
        srcElem.addEventListener(eventTypes[item].type,
        eventTypes[item].handler,false);
    }

}


window.onload=function(){

    [...document.getElementsByAttribute('strategy')].forEach(x=>{
    
        strategyMethodBind(x,{
            type:"click",
            handler:function(){
            
            }
        });
   
    })
}


查看完整回答
反对 回复 2017-07-30
  • 7 回答
  • 0 关注
  • 3921 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信