2016-07-20 3 views
1

Я здесь новый, и это мой первый «запрос» в stackflow :) Это мой код. Основная идея:Javascript onclick, onmouseout conflict, loop

  1. иконка по умолчанию белого
  2. Mouseover и MouseOut, которые работают вместе, как «зависание» в CSS. Я не могу использовать hover с css, потому что изображения - .png, поэтому им нужно использовать js.
  3. значок onclick меняется на серый, который выглядит как активируется.

Код работает, хотя я сделал это действительно сложным в неумении. Есть ли способ сделать его более простым? Использование цикла ?? Но как? Заранее спасибо!

var clickedWalk = false; 
 
var clickedBicycle = false; 
 
var clickedCar = false; 
 
var clickedBus = false; 
 
var clickedParkAndRide = false; 
 

 
function mouseOverWalk() { 
 
    document.getElementById("walk").src="images/Walk-gray.png"; 
 
} 
 

 
function mouseOverBicycle() { 
 
    document.getElementById("bicycle").src="images/Biking-gray.png"; 
 
} 
 

 
function mouseOverCar() { 
 
    document.getElementById("car").src="images/Car-gray.png"; 
 
} 
 

 
function mouseOverBus() { 
 
    document.getElementById("bus").src="images/Bus-gray.png"; 
 
} 
 

 
function mouseOverParkAndRide() { 
 
    document.getElementById("park-and-ride").src="images/PPlusBus-gray.png"; 
 
} 
 

 

 

 
function mouseOutWalk() { 
 
    if (clickedWalk == false) { 
 
     document.getElementById("walk").src = "images/Walk.png"; //mouseout works 
 
    } 
 
    clickedWalk = false;  
 
} 
 

 
function mouseOutBicycle() { 
 
    if (clickedBicycle == false) { //no click 
 
     document.getElementById("bicycle").src = "images/Biking.png"; //mouseout works 
 
    } 
 
    clickedBicycle = false; 
 
} 
 

 
function mouseOutCar() { 
 
    if (clickedCar == false) { //no click 
 
     document.getElementById("car").src = "images/Car.png"; //mouseout works 
 
    } 
 
    clickedCar = false; 
 
} 
 

 
function mouseOutBus() { 
 
    if (clickedBus == false) { //no click 
 
     document.getElementById("bus").src = "images/Bus.png"; //mouseout works 
 
    } 
 
    clickedBus = false; 
 
} 
 

 
function mouseOutParkAndRide() { 
 
    if (clickedParkAndRide == false) { //no click 
 
     document.getElementById("park-and-ride").src = "images/PPlusBus.png"; //mouseout works 
 
    } 
 
    clickedParkAndRide = false; 
 
} 
 

 
function clickWalk() { 
 
    document.getElementById("walk").src="images/Walk-gray.png"; //gray 
 
    document.getElementById("bicycle").src="images/Biking.png"; //white 
 
    document.getElementById("car").src="images/Car.png"; //white 
 
    document.getElementById("bus").src="images/Bus.png"; //white 
 
    document.getElementById("park-and-ride").src="images/PPlusBus.png"; //white 
 
    
 
    clickedWalk = true; 
 
} 
 

 
function clickBicycle() { 
 
    
 
    document.getElementById("walk").src="images/Walk.png"; //white 
 
    document.getElementById("bicycle").src="images/Biking-gray.png"; //gray 
 
    document.getElementById("car").src="images/Car.png"; //white 
 
    document.getElementById("bus").src="images/Bus.png"; //white 
 
    document.getElementById("park-and-ride").src="images/PPlusBus.png"; //white 
 
    
 
    clickedBicycle = true; 
 
} 
 

 
function clickCar() { 
 
    document.getElementById("walk").src="images/Walk.png"; //white 
 
    document.getElementById("bicycle").src="images/Biking.png"; //white 
 
    document.getElementById("car").src="images/Car-gray.png"; //gray 
 
    document.getElementById("bus").src="images/Bus.png"; //white 
 
    document.getElementById("park-and-ride").src="images/PPlusBus.png"; //white 
 

 
    clickedCar = true; 
 
} 
 

 
function clickBus() { 
 
    document.getElementById("walk").src="images/Walk.png"; //white 
 
    document.getElementById("bicycle").src="images/Biking.png"; //white 
 
    document.getElementById("car").src="images/Car.png"; //white 
 
    document.getElementById("bus").src="images/Bus-gray.png"; //gray 
 
    document.getElementById("park-and-ride").src="images/PPlusBus.png"; //white 
 

 
    clickedBus = true; 
 
} 
 

 
function clickParkAndRide() { 
 
    document.getElementById("walk").src="images/Walk.png"; //white 
 
    document.getElementById("bicycle").src="images/Biking.png"; //white 
 
    document.getElementById("car").src="images/Car.png"; //white 
 
    document.getElementById("bus").src="images/Bus.png"; //white 
 
    document.getElementById("park-and-ride").src="images/PPlusBus-gray.png"; //gray 
 

 
    clickedParkAndRide = true; 
 
}
<div id="modeListBoxSelect"> 
 
     <ul> 
 
      <li onclick="travelMode.byWalk()"><img id="walk" onmouseover="mouseOverWalk()" onmouseout="mouseOutWalk()" onclick="clickWalk()" src="images/Walk.png" alt="walk"</li> 
 
      <li onclick="travelMode.byBike()"><img id="bicycle" onmouseover="mouseOverBicycle()" onmouseout="mouseOutBicycle()" onclick="clickBicycle()" src="images/Biking.png" alt="bicycle"</li> 
 
      <li onclick="travelMode.byCar()"><img id="car" onmouseover="mouseOverCar()" onmouseout="mouseOutCar()" onclick="clickCar()" src="images/Car.png" alt="car"</li> 
 
      <li onclick="travelMode.byBus()"><img id="bus" onmouseover="mouseOverBus()" onmouseout="mouseOutBus()" onclick="clickBus()" src="images/Bus.png" alt="bus"</li> 
 
      <li onclick="travelMode.byParkAndRide()"><img id="park-and-ride" onmouseover="mouseOverParkAndRide()" onmouseout="mouseOutParkAndRide()" onclick="clickParkAndRide()" src="images/PPlusBus.png" alt="park-and-ride"</li> 
 
     </ul> 
 
    </div>

ответ

0

На самом деле, вы можете использовать 'зависать' в CSS. Просто введите «li» в качестве элемента блока с соответствующей высотой & ширины и добавьте к нему атрибут «id», как и с «img». Затем удалите элемент «img» и используйте css для стиля «li».

<div id="modeListBoxSelect"> 
    <ul> 
     <li onclick="travelMode.byWalk()" id="walk"></li> 
    </ul> 
</div> 

и CSS:

#walk { 
display: block; 
width: XXXpx; 
height: YYYpx; // size of the image 
background-image: url('your-image.png'); 
} 
#walk:hover { 
background-image: url('your-image-after-hover.png'); 
} 
0

Возможный способ упростить код может действовать следующим образом:

var imagesSrc = { 
    'walk': { 
     'white': 'images/Walk.png', 
     'gray': 'images/Walk-gray.png' 
    }, 
    'bicycle': { 
     'white': 'images/Biking.png', 
     'gray': 'images/Biking-gray.png' 
    }, 
    'car': { 
     'white': 'images/Car.png', 
     'gray': 'images/Car-gray.png' 
    }, 
    'bus': { 
     'white': 'images/Car.png', 
     'gray': 'images/Car-gray.png' 
    }, 
    'park-and-ride': { 
     'white': 'images/PPlusBus.png', 
     'gray': 'images/PPlusBus-gray.png' 
    } 
    }; 

    //Save the clicked image into this variable 
    var clickedImage; 

    function mouseOver(img) { 
    img.src = imagesSrc[img.id].gray; 
    } 

    function mouseOut(img) { 
    if(img !== clickedImage) { 
     img.src = imagesSrc[img.id].white; 
    } 
    } 

    function click(img) { 
    //previous clicked image back to white 
    clickedImage.src = imagesSrc[clickedImage.id].white; 
    //current clicked image to gray 
    img.src = imagesSrc[img.id].gray; 
    //save the current clicked image 
    clickedImage = img; 
    } 

Тогда ваш HTML должен выглядеть так:

<div id="modeListBoxSelect"> 
    <ul> 
    <li onclick="travelMode.byWalk()"><img id="walk" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="click(this)" src="images/Walk.png" alt="walk"</li> 
    <li onclick="travelMode.byBike()"><img id="bicycle" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="click(this)" src="images/Biking.png" alt="bicycle"</li> 
    <li onclick="travelMode.byCar()"><img id="car" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="click(this)" src="images/Car.png" alt="car"</li> 
    <li onclick="travelMode.byBus()"><img id="bus" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="click(this)" src="images/Bus.png" alt="bus"</li> 
    <li onclick="travelMode.byParkAndRide()"><img id="park-and-ride" onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" onclick="click(this)" src="images/PPlusBus.png" alt="park-and-ride"</li> 
    </ul> 
    </div> 

Я не пробовал, возможно, я сделал несколько ошибок но я думаю, что вы видите идею

Смежные вопросы