两个例子,好友选中效果和左侧右侧子菜单

一、好友选中效果

可以通过设置属性的方式判断当前是否被选中,也可以通过获取当前元素的颜色从而得知当前元素状态是否被选中,从而进行操作

1.通过设置属性的方式判断选中的元素

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>好友选中</title>
 <style>
     *{
         margin:0px auto;
         padding:0px;
     }
     #wai{
         height:400px;
         width:200px;
         margin-top:100px;
         margin-left:100px;
     }
     .li{
         height:30px;
         width:200px;
         background-color:blue;
         border:1px solid white;
         text-align:center;
         line-height:30px;
         vertical-align:middle;}

 </style>
 </head>

 <body>
 <div id="wai">
     <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">风吹柳叶遮黄雀</div>
     <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">薄翅不觉已落蝉</div>
     <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">谁将新樽辞旧月</div>
     <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">今月曾今朝故人</div>
 </div>
 </body>
 </html>
 <script>
     //首先获取到所有好友列表
     var l=document.getElementsByClassName("li");
     //鼠标单击事件
     function xuan(b){
         //遍历数组,设置属性ys的值为0,颜色为蓝
         for(var i=0;i<l.length;i++){
             l[i].setAttribute("ys","0");
             l[i].style.backgroundColor="blue";
         }
         //当前元素ys属性值为1,颜色为红
         b.setAttribute("ys","1");
         b.style.backgroundColor="red";
     }

     //鼠标移上的效果
     function bian(a){
         //遍历数组内容,只要ys属性的值是0,颜色变为蓝色
         for(var i=0;i<l.length;i++){
             if(l[i].getAttribute("ys")=="0"){
                 l[i].style.backgroundColor="blue";
             }
         }
         //获取当前元素ys属性值如为0,则颜色变为绿
         if(a.getAttribute("ys")=="0"){
             a.style.backgroundColor="green";
         }
     }
     //鼠标离开事件
     function li(c){
         //如果当前元素ys值为0,颜色设为蓝色
         if(c.getAttribute("ys")=="0"){
             c.style.backgroundColor="blue";
         }
     }
 </script>

2.通过获取当前元素颜色的方式判断

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>好友选中</title>
 <style>
     *{
         margin:0px auto;
     }
     #wai{
         margin-top:100px;
         margin-left:100px;
         width:300px;
         height:300px;}
     .li{
         margin:1px;
         background-color:white;
         font-family:微软雅黑;
         font-size:16px;
         text-align:center;
         width:300px;
         height:50px;
         line-height:50px;
         vertical-align:middle;
         float:left;}
 </style>
 </head>

 <body>
     <div id="wai">
         <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">风吹柳叶遮黄雀</div>
         <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">薄翅不觉已落蝉</div>
         <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">谁将新樽辞旧月</div>
         <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">今月曾经照古人</div>
     </div>
 </body>
 </html>
 <script>
     //之前曾经用给每个div加id,然后函数传回id的方式,错误,因为这样函数写在div传回自己的用this,如果函数传回的是下面的div的改变,可以尝试用加div

     //获取所有列表好友到数组
     var z=document.getElementsByClassName('li');

     //鼠标移上的效果
     function yishang(s){
         //遍历数组,判断每个颜色是绿色即移上状态,则颜色设为白色即初始颜色,如果颜色是蓝色即选中状态,则跳出本次循环颜色依旧为蓝色

         for(i=0;i<z.length;i++){
             if(z[i].style.backgroundColor=="green"){
                 z[i].style.backgroundColor="white";
             }else if(z[i].style.backgroundColor=="blue"){
                 //跳出本次循环
                 continue;
             }
             //在判断当前元素颜色是否是蓝色即被选中状态,是则跳出即状态不变,否则颜色设为绿色即鼠标移上的效果
             if(s.style.backgroundColor=="blue"){
                 continue;
             }else{
                 s.style.backgroundColor="green";
             }
             /*
             此方法原本作为对上面方法的优化,可以直接判断现在的颜色如果是白色,则变为绿色,该方法的漏洞在于,当前没有颜色可以获取
             如果使用该方法,应当在元素中内联颜色
             if(s.style.backgroundColor=="white"){
                 s.style.backgroundColor="green";
             }e*/
         }
     }
     //鼠标单击事件,鼠标单击首先将所有元素设置为初始白色,然后当前颜色设为蓝色
     function dianJi(y){
         for(i=0;i<z.length;i++){
             z[i].style.backgroundColor="white";
         }
         y.style.backgroundColor="blue";
     }
     //鼠标离开事件,鼠标离开如果颜色是绿色即未被选中,则变为白色
     function zou(z){
         if(z.style.backgroundColor=="green"){
             z.style.backgroundColor="white";
         }
     }
 </script>

使用这种方法,为何能够获取到当前元素颜色进行判断?首先鼠标移上,执行函数 yishang(),然后进for循环遍历进行判断,不符合判断任何一种情况,则无操作,进行下一个判断,如果当前元素颜色是被选中状态则跳出,如果不是则设为绿色,第一个颜色就这样赋值上了

这个问题我出错的几点需要注意:

1.在函数中,什么时候用数组元素的样式,什么时候用当前元素的样式多次搞错

2.判断中判断样式是否是该颜色,一定要用==

二、左侧右侧子菜单

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>子菜单</title>
 <style>
     *{
         margin:0px auto;
         padding:0px;}
     #wai{
         margin-top:150px;
         margin-left:200px;
         height:300px;
         width:100px;}
     .li{
         height:30px;
         width:100px;
         background-color:#0FF;
         line-height:30px;
         vertical-align:middle;
         text-align:center;
         border:1px solid white;
         }
     .li1{
         height:30px;
         width:100px;
         background-color:#0F0;
         line-height:30px;
         vertical-align:middle;
         text-align:center;
         border:1px solid white;
         }

     .li:hover{
         background-color:#FF3;
         }
     .li1:hover{
         background-color:#FF3;
         }

 </style>
 </head>

 <body>
     <div id="wai">
         <div class="li" onclick="show('cp')">产品中心</div>
         <div class="liw" id="cp" style="display:none">
             <div class="li1">休闲</div>
             <div class="li1">百货</div>
         </div>
         <div class="li" onclick="show('dt')">最新动态</div>
         <div class="liw" id="dt" style="display:none">
             <div class="li1">公司动态</div>
             <div class="li1">业界新闻</div>
         </div>
         <div class="li">关于我们</div>
         <div class="li">联系我们</div>
     </div>
 </body>
 </html>
 <script>
     //单击事件
     function show(id){
         //获取所有子菜单到数组,获取当前元素
         var s=document.getElementsByClassName("liw");
         var a=document.getElementById(id);
         //判断里注意用==
         //如果当前元素隐藏则显示,否则隐藏
         if(a.style.display=="none"){
             a.style.display="block";
         }else{
             a.style.display="none";
         }
     }
 </script>

JavaScript事件与例子(三)的更多相关文章

  1. Javascript事件模型(三):JavaScript事件绑定方法总结(及Jquery)

    JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScript代码中直接绑定 3 绑定事件监听函数 JQuery中绑定事件的几种方法 主要有on().bind( ...

  2. JavaScript事件绑定的三种方式

    (一)事件绑定的三种方式 (1)通过on的形式 <script type="text/javascript"> var div = document.getElemen ...

  3. JavaScript事件与例子

    事件,就是预先设置好的一段代码,等到用户触发的时候执行. 一:常见的事件: 1.关于鼠标的事件 onclick 鼠标单击触发 ondblclick 鼠标双击触发 onmouseover 鼠标移上触发 ...

  4. Javascript 事件对象(三)事件冒泡

    事件流---事件冒泡取消冒泡:ev.cancelBubble=true ---事件捕获Ie下是没有的,在绑定事件中,标准下是有的 <!DOCTYPE HTML> <html> ...

  5. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

  6. Javascript事件模型系列(一)事件及事件的三种模型

    一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...

  7. javascript系列之DOM(三)---事件

    原文:javascript系列之DOM(三)---事件 事件是javascript跳动的心脏,是DOM所有成分结合的万金油.当我们在WEB 上进行某些交互时,事件也就发生了.点击某些内容,鼠标经过特定 ...

  8. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  9. javaScript事件(三)事件对象

    一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 四.IE事件处理程序 以上内容见javaScript事件(二)事件处理程序 五.事件对象 1.认识事件对象 事 ...

随机推荐

  1. iOS开发tips-UINavigationBar的切换

    概述 在iOS系统中,如果控制器是以push方式进行管理的话,那么事实上多个控制器是共享的同一个导航栏.当然iOS系统的设计无可厚非,但是国内的应用经常会遇到很多个性的设计,就比如说A push到 B ...

  2. grep与正则表达式

    grep的作用:文本搜索工具,根据用户指定的"模式"对目标文件逐行进行匹配检查:打印匹配到的行. 模式:正则表达式编写的过滤条件. 正则表达式(REGEXP):由一类特殊字符及文本 ...

  3. git pull冲突:commit your changes or stash them before you can merge.

    今天用git pull来更新代码,遇到了下面的问题: error: Your local changes to the following files would be overwritten by ...

  4. OpenStack修复影响宿主机的QEMU漏洞CVE-2017-2615

    距离这个虚拟化层面的漏洞公告发出已有两个多月了,漏洞详情可以查看: 360安全应急响应中心-360发现QEMU严重漏洞 影响国内大部分公有云 简单来说是通过Cirrus VGA操作读取宿主机内存中的内 ...

  5. [UWP]不怎么实用的Shape指南:自定义Shape

    1. 前言 这篇文章介绍了继承并自定义Shape的方法,不过,恐怕,事实上,100个xaml的程序员99个都不会用到.写出来是因为反正都学了,当作写个笔记. 通过这篇文章,你可以学到如下知识点: 自定 ...

  6. VR全景智慧城市-VR大时代

    这是一个创业的时代,这是一个创新的社会,我们的国家从没有像今天这样高度重视创业创新,我们的社会从没有像今天这样对创业创新寄予如此厚望.李克强总理在2015年政府工作报告中指出:要把"大众创业 ...

  7. Javascript版-显示相应图片的详细信息

    Hi All, 分享一个通过JS来显示相应图片的详细信息. 需求:进入页面时,动态加载图片信息:当鼠标移动到某一图片上时,则显示该图片的大图片并显示相应说明信息:当鼠标移开图片时,清除新创建的元素. ...

  8. 基于html5 Canvas图表库 : ECharts

    ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值 ...

  9. How to use data analysis for machine learning (example, part 1)

    In my last article, I stated that for practitioners (as opposed to theorists), the real prerequisite ...

  10. Git详细教程(3)---结合gitHub使用

    1.GitHub的基本使用 GitHub就是一个网站,本身是基于Git,可以完成版本控制,可以托管代码. 英文版的. 在使用GitHub之前,首先需要注册一个账号. 登录,就可以完成相关的一些操作. ...