Reputation: 309
I have several red and black buttons and I want to add 'onmousedown' and 'onmouseup' events to the set of red buttons that share the same class ("button red").
onmousedown I want to change add the class "opaque" and onmouseup remove it again.
So onmousedown the red button which has been "selected" goes slightly transparent and onmouseup goes back to normal (red). The other buttons remain unaffected.
css
.button {
background-color: black;
color: white;
height: 30px;
width: 150px;
text-align: center;
}
.button.red {
background-color: red;
}
.button.red.opaque {
opacity: 0.7;
}
javascript (so far)
var classname = this.document.getElementsByClassName("button red");
for (var i = 0; i < classname.length; i++) {
classname[i].addEventListener('onmousedown', classList.add("opaque"), false);
classname[i].addEventListener('onmouseup', classList.remove("opaque"), false);
}
Upvotes: 0
Views: 1370
Reputation: 43950
<form>
tagtransition
propertyvar form = document.forms.main;
form.addEventListener('mousedown', fade, false);
form.addEventListener('mouseup', fade, false);
function fade(e) {
if (e.target !== e.currentTarget) {
e.target.classList.toggle('opq');
}
}
.btn {
background-color: black;
color: white;
height: 30px;
width: 50px;
text-align: center;
opacity: 1;
cursor: pointer;
border-radius: 10px;
transition: all .5s ease;
}
.red {
background-color: red;
transition: all .5s ease
}
.btn.red.opq {
opacity: 0.7;
transition: all .5s ease
}
<form id='main'>
<button class='red btn' type='button'>RED</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='red btn' type='button'>RED</button>
<button class='btn' type='button'>BLK</button>
<button class='btn' type='button'>BLK</button>
</form>
Upvotes: 2
Reputation: 21725
You can do this with CSS only.
button {
padding: 0.5rem 1rem;
background-color: lightgray;
border: 1px solid gray;
}
button:active {
background-color: salmon;
opacity: 0.5;
}
<button>Click Me!</button>
To address this in JS like you're doing you will need to fix a couple of things.
As mentioned in the comments, there was a type for getElementsByClassName()
. I would use querySelectorAll()
instead of getElementsByClassName()
because it is more flexible in how you can select elements.
classList
is a property of a DOM element and cannot be used on its own. Do this element.classList.add( 'class' )
, not this classList.add( 'class' )
.
Your CSS selectors were incorrect, i.e. .button red opaque
will try to select an element with the class .button
that contains an element of <red>
that has an element of <opaque>
.
There might be something wrong with your markup and selectors but I don't have your HTML to verify. I assumed your markup for my example.
var $btns = [].slice.call( document.querySelectorAll( '.button.red' ) );
$btns.map( function ( btn ) {
btn.addEventListener( 'mousedown', function ( e ) {
btn.classList.add( 'opaque' );
} );
btn.addEventListener( 'mouseup', function ( e ) {
btn.classList.remove( 'opaque' );
} );
} );
.button {
padding: 0.5rem 1rem;
background-color: lightgray;
border: 1px solid gray;
}
.button.red {
background-color: indianred;
}
.button.opaque {
opacity: 0.5;
}
<button class="button red">Click Me!</button>
Upvotes: 6
Reputation: 5648
It is possible to do with css, but here is a solution to add jquery listener on mouse up and mouse down.
$('.button' + '.red').each(function() {
$(this).mousedown(function() {
$(this).toggleClass('opaque');
});
$(this).mouseup(function() {
$(this).toggleClass('opaque');
});
});
.button {
background-color: black;
color: white;
height: 30px;
width: 150px;
text-align: center;
}
.red {
background-color: red;
}
.black {
background-color: black;
}
.opaque {
opacity: 0.7;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="button red">Button</button>
<button class="button black">Button</button>
Upvotes: 2
Reputation: 2974
var classname = this.document.getElementsByClassName("button red");
for (var i = 0; i < classname.length; i++) {
classname[i].addEventListener('mousedown', function () {
this.classList.add("opaque")
}, false);
classname[i].addEventListener('mouseup', function () {
this.classList.remove("opaque")
}, false);
}
CSS:
.button {
background-color: black;
color: white;
height: 30px;
width: 150px;
text-align: center;
}
.button.red {
background-color: red;
}
.button.red.opaque {
opacity: 0.7;
}
getElementByClassName
should be getElementsByClassName
classList
propertymousedown
and mouseup
Upvotes: 1