Hi im a beginner in javascript/jquery. I am making an application that takes batteries (drawn in CSS) and allows the user to connect the + and - terminals by clicking and then displays an overall voltage and Amp hour output based on how the batteries are wired.
How would I allow the user to click the positive or negative squares (which are just div tags within the battery class) and then relay to javascript that the user has clicked certain boxes, THEN somehow a wire (just a line) would appear between where the user clicked. I really don't know how I would go about coding this. THANKS
HTML:
<!DOCTYPE html>
<head>
<link rel="stylesheet" type="text/css" href="batterypagestylesheet.css">
<script>
</script>
</head>
</body>
<div id="batterysection">
<div id="pterminal">+ terminal</div>
<div id="nterminal">- terminal</div>
</div>
<div class="battery">
<div id="pos">+</div>
<div id="neg">-</div>
</div>
<div class="battery2">
<div id="pos">+</div>
<div id="neg">-</div>
</div>
</body>
</html>
CSS:
#batterysection{
background-color:purple;
margin-left:auto;
margin-right:auto;
width:1100px;
height:800px;
}
#pterminal{
position:absolute;
left:500px;
top:50px;
width:200px;
height:100px;
background-color:red;
color:white;
text-align:center;
font-size:40px;
}
#nterminal{
position:absolute;
left:700px;
top:50px;
width:200px;
height:100px;
background-color:black;
color:white;
text-align:center;
font-size:40px;
}
.battery{
position:absolute;
top:200px;
left:600px;
width:100px;
height:75px;
background-color:grey;
border:solid 2px;
}
.battery2{
position:absolute;
top:200px;
left:700px;
width:100px;
height:75px;
background-color:grey;
border:solid 2px;
}
#pos{
position:relative;
height:25px;
width:25px;
background-color:red;
color:white;
margin-left:40px;
text-align:center;
}
#neg{
position:relative;
height:25px;
width:25px;
background-color:black;
color:white;
margin-left:40px;
top:20px;
text-align:center;
}
With a very basic
$('#pterminal').click(function() {
// pterminal clicked
});
you have a click-event handler with jQuery.
Drawing a line sounds something you would do on a HTML5 canvas-element these days. Seeing you're a beginner, you might invest some time in a course like http://www.codecademy.com/courses/web-beginner-en-SWM11/0/1.
Also watch out with what is an id and what a class. Id's (#) are unique, there is only one - Classes (.) are a bit like tags: use them when you have similar stuff. Thus, it makes more sense to make #battery1 and #battery2 id's and .pos and .neg classes.
Related
I'm fairly new to HTML,CSS and Javascript and I'm trying to build a site with, ironically, 'How To' guides and instructions and business processes.
The idea is that I have a container on the side that acts as a 'menu' with buttons in it to select the guide they want.
Once the button is clicked, the container on the right changes. These containers on the right will be the space where the training material is placed, but for now, i have given all the containers a different colour so I can tell when it has changed. I'd like the button functions to work before I start adding everything to the containers. I'm struggling to get the code to work though, so the containers actually change! I've created a J-Fiddle that hopefully will show what I have tried so far..
To be honest I did also 'borrow' some code regarding getting the other containers to .hide when a button is clicked, but it doesn't work for me. If anyone has a more efficient way to hide the other containers (e.g. Containers 1,2 and 3 are hidden when container button 4 is selected), then go for it! Any help is really appreciated.
<div class="centrepositioning">
<div class="howToLeftList">
<button id="showpanel1">Centre White Panel</button>
<button id="showpanel2">Centre Red Panel</button>
<button id="showpanel3">Centre Blue Panel</button>
<button id="showpanel4">Centre Yellow Panel</button>
</div>
<div id="centrePanel"></div>
<div id="centrePanel2"></div>
<div id="centrePanel3"></div>
<div id="centrePanel4"></div>
<script type="text/javascript">
</script>
<script>
$(function() {
$('#showpanel1').click(function() {
$('div[id^=div]').hide();
$('#centrePanel1').show();
});
$('#showpanel2').click(function() {
$('div[id^=div]').hide();
$('#centrePanel2').show();
});
$('#showpanel3').click(function() {
$('div[id^=div]').hide();
$('#centrePanel3').show();
});
$('#showpanel4').click(function() {
$('div[id^=div]').hide();
$('#centrePanel4').show();
});
})</script>
.centrepositioning
{
border:thin blue solid;
margin:auto;
padding:10px;
width:1337px;
}
.howToLeftList
{
width:250px;
height:300px;
background-color:#004FB6;
padding:10px;
color:white;
float:left;
margin:5px;
}
#centrePanel
{
width:1000px;
background-color:white;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
}
#centrePanel2
{
width:1000px;
background-color:red;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
display:none;
}
#centrePanel3
{
width:1000px;
background-color:blue;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
display:none;
}
#centrePanel4
{
width:1000px;
background-color:yellow;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
display:none;
JSFiddle
Ok some notes first:
1) In the fiddle you should put your javascript on the bottom left window, the top left window is for html only, minor, just throwing it as hint.
2) Your fiddle does not have jquery loaded, you can manage external resources on the left menu, right now your $ is undefined in the fiddle
And on to your problem, this selector is wrong
$('div[id^=div]').hide();
this selector is the right one
$('div[id^=centrePanel]').hide();
Your original selector is targeting any div with an id of "div" something, where you name them differently.
Try it and let me know
Here is a working code. In case you need to reference it.
$(function() {
$('#showpanel1').click(function() {
$('div[id^=centrePanel]').hide();
$('#centrePanel1').show();
});
$('#showpanel2').click(function() {
$('div[id^=centrePanel]').hide();
$('#centrePanel2').show();
});
$('#showpanel3').click(function() {
$('div[id^=centrePanel]').hide();
$('#centrePanel3').show();
});
$('#showpanel4').click(function() {
$('div[id^=centrePanel]').hide();
$('#centrePanel4').show();
});
})
.centrepositioning
{
border:thin blue solid;
margin:auto;
padding:10px;
}
.howToLeftList
{
width:250px;
height:300px;
background-color:#004FB6;
padding:10px;
color:white;
float:left;
margin:5px;
}
#centrePanel1
{
width:1000px;
background-color:white;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
}
#centrePanel2
{
width:1000px;
background-color:red;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
display:none;
}
#centrePanel3
{
width:1000px;
background-color:blue;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
display:none;
}
#centrePanel4
{
width:1000px;
background-color:yellow;
height:2000px;
float:left;
border:thin red solid;
margin:5px;
padding:10px;
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="centrepositioning">
<div class="howToLeftList">
<button id="showpanel1">Centre White Panel</button>
<button id="showpanel2">Centre Red Panel</button>
<button id="showpanel3">Centre Blue Panel</button>
<button id="showpanel4">Centre Yellow Panel</button>
</div>
<div id="centrePanel1">white</div>
<div id="centrePanel2">red</div>
<div id="centrePanel3">blue</div>
<div id="centrePanel4">yellow</div>
I want to show a textbox next to another div, but it it appears below instead. The position of the textbox must be absolute. This demo demonstrates the issue. Thank you.
css
#show{
border:1px solid gray;
cursor:pointer;
float:left;
}
#textBox{
display:none;
position:absolute;
border:1px solid gray;
width:100px;
height:100px;
float:left;
background-color:pink;
}
#hide{
clear:left;
cursor:pointer;
text-align:center;
}
html
<div id = "show">click me to show test box</div>
<div id = "textBox">text</div>
<div id = "hide">hide text box</div>
js
$('#show').click(function(){
$('#textBox').show();
});
$('#hide').click(function(){
$('#textBox').hide();
});
Most easiest way out would be to replace your css with the below code:
#show{
border:1px solid gray;
cursor:pointer;
float:left;
}
#textBox{
display:none;
position:absolute;
border:1px solid gray;
width:100px;
height:100px;
margin-left:165px;
background-color:pink;
}
#hide{
clear:left;
cursor:pointer;
text-align:center;
margin-left:76px;
}
Check the fiddle:http://jsfiddle.net/6gk0hybj/4/
Another method as mentioned is the comments can be found at:http://jsfiddle.net/6gk0hybj/5/
If you want it more dynamic , we need to change a bit of javascript. Let me know if you want it to be more dynamic
I have the following layout (Parent div, two child divs)
wanted to make this layout responsive for browser's width, so anytime the user changes the browser's width this layout should occupies the same area of screen
also, I wanted to middle-text the content, I've tried vertical-align: middle;, display: table-cell;
any suggestions?
Markup here
this is your solution html with css
<html>
<head>
<title>test</title>
<style>
.main{
width:97%;
border:1px solid #000;
height:100px;
padding:1%;
}
.subone{
width:30%;
border:1px solid #000;
float:left;
height:100px;
margin-right:2%;
}
.subtwo{
width:67%;
border:1px solid #000;
float:left;
height:100px;
}
</style>
</head>
<body>
<div class="main">
<div class="subone">
</div>
<div class="subtwo">
</div>
</div>
</body>
</html>
I have created you a fluid layout, with your divs. You do not need to use media queries.
And also to use
vertical-align:middle;
you must put
display:table;
on the parent div and you must not float the divs inside.
You can check this example
will it be helpful???
use diplay:table; for parent and display:table-cell for childs..decalare parents width in percentage with overflow:hidden;
HTML::
<div class="parent">
<div class="first"></div>
<div class="second"></div>
</div>
CSS ::
.parent{
display:table;
width:80%;
border-spacing:4px;
border:2px solid black;
overflow:hidden;
}
.first{
text-align:center;
display:table-cell;
border:2px solid black;
width:100px;
height:200px;
}
.second{
text-align:center;
display:table-cell;
border:2px solid black;
height:200px;
}
FIDDLE
I am trying to implement a javascript pop-up box, but I am not sure how to fix the position of the pop-up window. Please check the below fiddle. When I click on the button, the box somehow appears in the middle of the page. Is there a way to make it appears right under my button?
http://jsfiddle.net/kf9mS/
<html lang="en" dir="ltr">
<head>
<style type="text/css">
.popup{
position:relative;
top:0px;
left:0px;
margin:0px auto;
width:200px;
height:150px;
font-family:verdana;
font-size:13px;
padding:10px;
background-color:rgb(240,240,240);
border:2px solid grey;
z-index:100000000000000000;
display:none
}
.cancel{
display:relative;
cursor:pointer;
margin:0;
float:right;
height:10px;
width:14px;
padding:0 0 5px 0;
background-color:red;
text-align:center;
font-weight:bold;
font-size:11px;
color:white;
border-radius:3px;
z-index:100000000000000000;
}
.cancel:hover{
background:rgb(255,50,50);
}
</style>
</head>
<body>
<button onClick="openPopup();">click here</button>
<div id="test" class="popup">
This is a test message
<div class="cancel" onclick="closePopup();"></div>
</div>
</body>
</html>
and
function openPopup() {
document.getElementById('test').style.display = 'block';
}
function closePopup() {
document.getElementById('test').style.display = 'none';
}
(forked from javascript onclick create(element) div viz popup box)
Thanks!
Remove margin: 0 auto property. Because It is enforcing the element to be in center.
Working Fiddle
In your CSS popup make position: absolute; and remove top and left property
so your popup would become
.popup{
position:absolute;
margin:0px auto;
width:200px;
height:150px;
font-family:verdana;
font-size:13px;
padding:10px;
background-color:rgb(240,240,240);
border:2px solid grey;
z-index:100000000000000000;
display:none
}
Rest all is fine
Below is the code for the displaying a number of items on a shopping cart image.
The background image is not displaying.
Style sheet:
div#cart{
background:url("Cart.gif") no-repeat;
display:inline-block;
height:35px;
width:35px;
}
#clickCount{
float:left;
right:-50px;
top:-15px;
position:relative;
background:lightblue;
border-radius:80px;
border:1px solid grey;
height:20px;
width:20px;
text-align:center;
}
This is the HTML code where I'm using 2 divs one for the display and other for the count:
<code>
<div><div id="cart"></div><p id="clickCount">0</p></div>
<div id="click">
<input type="submit" onclick="myFunc()" value="Cart">
</input>
</code>
Below is the javascript:
function myFunc(){
var val=document.getElementById("clickCount").innerHTML; document.getElementById("clickCount").innerHTML=Number.parseInt(val)+1;
}
This is part of my code. The URL works. My HTML is just a regular HTML document with a body etc...
Is there any particular dimensions which I need to consider while choosing an image for this?
In your CSS remove the div text infront of #cart code should then be #cart{
EDIT::
Also your Cart.gif must be 35px x 35px or smaller since you are setting that dimension in the Css. If its larger than this you could only be seeing the top left corner of the image which could be white space
Here is example using a placeholder image for cart
#cart{
background:url("https://placeholdit.imgix.net/~text?txtsize=8&txt=cart&w=35&h=35") no-repeat;
display:inline-block;
height:35px;
width:35px;
}
#clickCount{
float:left;
right:-50px;
top:-15px;
position:relative;
background:lightblue;
border-radius:80px;
border:1px solid grey;
height:20px;
width:20px;
text-align:center;
}
It could be because there is nothing in the div#cart. Try placing a whitespace character inside of it.
<div><div id="cart"> </div><p id="clickCount">0</p></div>
<div id="click">
<input type="submit" onclick="myFunc()" value="Cart" />
</div>
Side note: <input> tags do not need a closing tag.
I missed giving dimensions for the image.
#cart{
background-image: url("Cart.gif");
background-size: 35px 40px;
display:inline-block;
height:35px;
width:35px;
}
Please check your image if it has 35px*35px dimensions or not,
And if it larger then that of your DIV#cart div dimensions you have to add background positioning properties to CSS.
I have used your code only in below snippet with just google image sprite with positioning properties and it works perfectly fine.
function myFunc(){
var val=document.getElementById("clickCount").innerHTML; document.getElementById("clickCount").innerHTML=Number.parseInt(val)+1;
}
div#cart{
background:url("https://www.google.com/images/nav_logo225.png") no-repeat right -35px ;
display:inline-block;
height:35px;
width:35px;
}
#clickCount{
float:left;
right:-50px;
top:-15px;
position:relative;
background:lightblue;
border-radius:80px;
border:1px solid grey;
height:20px;
width:20px;
text-align:center;
}
<div><div id="cart"></div><p id="clickCount">0</p></div>
<div id="click">
<input type="submit" onclick="myFunc()" value="Cart">
</input>
Or can check this fiddle as well.
Thanks.