2021-06-22 day11

1.offset系列

  1. offsetWidth 占位宽 元素的宽度(包括border 和padding)
  2. offsetHeight 占位高 元素的高度(包括border 和padding)
  3. clientWidth 可视宽度 (不包括border)
  4. clientHeight 可视高度
  5. offsetLeft : 获取距离具有定位的父级元素的left值。没有具有定位的父级就按照浏览器窗口为基准
  6. offsetTop : 获取距离具有定位的父级元素的top值

2.什么是事件&事件对象的获取

  • 什么是事件:onclick onmouseover onmouseout onresize onscroll onload(事件类型)
oDiv.onXxx = function(){}
  • 事件的组成:
  1. 事件源: 触发的元素(点击的元素)
  2. 事件类型 触发事件的类型(click mouseover)
  3. 事件处理函数 触发完毕后要执行的代码
	var oDiv = document.querySelector('div');
	oDiv.onmouseover = function () {
       	this.style.backgroundColor = 'yellow'
  }
  1. 事件源:oDiv
  2. 事件类型:mouseover
  3. 事件处理函数:function(){ } 注意:事件处理函数中有一个this,他代表事件源
  4. 移入oDiv上面会发生什么事情

3.event对象获取坐标的方法

  • 事件对象
  1. 事件对象的概念:事件触发时,记录了一系列与该事件相关的信息
  2. 事件对象的获取:非常简单 ,就在事件处理函数的形参位置的第一个参数位置,写e(是事件对象),是浏览器传递过来
  3. 相关信息:鼠标点击的坐标位置(clientX,clientY) 事件的类型(type) 事件源(target)

获取坐标

  1. 相对于元素本身 offsetX和offsetY
  2. 相对于相对浏览器窗口 clientX和clientY
  3. 相对页面 pageX和pageY
  4. clientX和pageX的关系和区别:
  5. 如果没有滚动条,clientX=pageX
  6. 如果出现水平滚动条:pageX>clientX (页面自己设置的太宽了)

4.常见的鼠标事件类型

  1. click(单击事件)
  2. dbclick(双击事件)
  3. oncontextmenu(右击事件)
  4. onmouseover(鼠标移入)
  5. onmouseout(鼠标移出)
  6. onmouseenter(鼠标移入)
  7. onmouseleave(鼠标移出)
  8. onmousedown(鼠标按下)
  9. onmousemove(鼠标移动)
  10. onmouseup(鼠标抬起)

5.常见的键盘事件

键盘事件:onkeydown(鼠标按下) , onkeypress(鼠标按下并抬起), onkeyup(鼠标抬起)

<ul>
    <li>1个li</li>
</ul>
	var oIpt = document.querySelector('#oipt');
    var oUl = document.querySelector('ul')
    oIpt.onkeyup = function(e){
      // window.event:IE低版本支持的写法
      var ev = e || window.event;//保证我们兼容不同的浏览器
      // 兼容firfox低版本的浏览器e.which
      var key = ev.keyCode || ev.which; //保证我们兼容不同的浏览器
    }

如何实现组合键盘

  1. altKey:按住其他键的同时按住alt 按住了alt键,会返回true
  2. ctrlKey:按住其他键的同时按住ctrl
  3. shiftKey:按住其他键的同时按住shift
	// 按住了回车和alt
	if (key==13&&ev.shiftKey) {
	    var oLi = document.createElement('li');
	    oLi.innerHTML = '我是新增的'
	    oUl.appendChild(oLi)
	}

6.常见的表单对象

  1. onfocus: 光标获得焦点
		oIpt.onfocus = function(){
			this.style.backgroundColor = 'green'
			this.style.color = '#fff'
			oSpan.innerHTML = '已经获得焦点,请输入....'
			oSpan.style.color= 'red'
		}
  1. onblur 失去焦点
	oIpt.onblur = function(){
	   this.style.backgroundColor = ''
	   this.style.color = '#000'
	   oSpan.innerHTML = '输入完成,内容无误...'
	   oSpan.style.color= 'green'
	}
  1. oninput 输入一次触发一次
		oIpt.oninput = function(){
           console.log(1);
        }
  1. onchange 内容发生改变时触发 不会立即触发,而是等到失去焦点时,检测内容相比原始值变化了触发
	oIpt.onchange = function(){
        console.log(1);
     }

7.事件绑定的方式

给元素绑定事件的方式:(type:click)

  1. DOM0级事件绑定方式 元素.on+type = function(){}
  • 缺点:不能给同一个元素的同一个事件进行多次绑定
  • 优点:兼容好
  1. DOM2级事件绑定方式 事件监听法 元素.addEventListener(type,fn,false); false代表冒泡。true捕获。第三个参数可以省去 (type前面没有on)
  • 优点:可以给同一个元素的同一个事件进行多次绑定
  • 缺点:兼容性不好,不支持IE低版本浏览器
  • IE低版本处理方式: 元素.attachEvent(on+type,fn)

全选与取消全选

	var oCheck_all=document.querySelector("#check_all");
    var oCheck=document.getElementsByName("check");
    // 1. 点击全选按钮。下面所有的元素被选中
    oCheck_all.onclick=function(){
        for(var i=0;i<oCheck.length;i++){
        // 将全选的状态赋值给每一个input框状态
            oCheck[i].checked=this.checked;
        }
    }
        // 2. 点击下面所有的元素,上面自动全选
        for(var i=0;i<oCheck.length;i++){
            oCheck[i].onclick=function(){
                // 假设所有的input都被选中
                var flag=true;
                for(var j=0;j<oCheck.length;j++){
                    if(oCheck[j].checked==false){
                        flag=false;
                        break;
                    }
                }
                // 如果都是true。就让上面的input选中
                   oCheck_all.checked=flag;
        }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是Java代码实现: ```java import java.time.LocalDate; import java.time.chrono.Chronology; import java.time.chrono.ChronoLocalDate; import java.time.chrono.ChronoPeriod; import java.time.chrono.ChronologyType; import java.time.temporal.ChronoField; import java.time.temporal.TemporalAdjusters; import java.util.HashMap; public class LunarCalendar { // 二十四节气 private static final String[] solarTerms = { "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至", "小寒", "大寒" }; // 二十四节气对应的日期 private static final HashMap<String, LocalDate> solarTermMap = new HashMap<>(); // 初始化二十四节气对应的日期 static { Chronology lunarChronology = Chronology.of(ChronologyType.JAPANESE); ChronoLocalDate start = lunarChronology.date(2000, 1, 1); ChronoLocalDate end = lunarChronology.date(2023, 1, 1); ChronoPeriod period = ChronoPeriod.between(start, end); for (int i = 0; i < solarTerms.length; i++) { LocalDate solarTermDate = null; for (ChronoLocalDate date = start; !date.isAfter(end); date = date.plus(period)) { int year = date.get(ChronoField.YEAR); int month = date.get(ChronoField.MONTH_OF_YEAR); int day = date.get(ChronoField.DAY_OF_MONTH); LocalDate solarTerm = LocalDate.of(year, month, day); if (solarTerm.get(ChronoField.MONTH_OF_YEAR) != month) { solarTerm = solarTerm.with(TemporalAdjusters.lastDayOfMonth()); } if (solarTerms[i].equals(getSolarTerm(solarTerm))) { solarTermDate = solarTerm; break; } } solarTermMap.put(solarTerms[i], solarTermDate); } } // 获取某个日期对应的二十四节气 public static String getSolarTerm(LocalDate date) { int y = date.getYear(); int m = date.getMonthValue(); int d = date.getDayOfMonth(); if (d == getSolarTermDay(y, (m - 1) * 2)) { return solarTerms[(m - 1) * 2]; } if (d == getSolarTermDay(y, (m - 1) * 2 + 1)) { return solarTerms[(m - 1) * 2 + 1]; } return null; } // 获取某年某节气的日期 private static int getSolarTermDay(int year, int index) { double[] solarTermInfo = new double[]{0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758}; int[] solarTermDay = new int[24]; for (int i = 0; i < 24; i++) { solarTermDay[i] = (int) Math.round(solarTermInfo[i] + (31556925974.7 * (year - 2000) + 220250000) / Math.pow(2, (i * 2 + 1)) / 1000); } return solarTermDay[index]; } // 输出某年的二十四节气日期 public static void printSolarTerms(int year) { System.out.println(year + "年的二十四节气日期:"); for (String solarTerm : solarTerms) { System.out.printf("%s,%s%n", solarTerm, solarTermMap.get(solarTerm).withYear(year)); } } public static void main(String[] args) { printSolarTerms(2002); printSolarTerms(2003); printSolarTerms(2004); printSolarTerms(2005); printSolarTerms(2006); printSolarTerms(2007); printSolarTerms(2008); printSolarTerms(2009); printSolarTerms(2010); printSolarTerms(2011); printSolarTerms(2012); printSolarTerms(2013); printSolarTerms(2014); printSolarTerms(2015); printSolarTerms(2016); printSolarTerms(2017); printSolarTerms(2018); printSolarTerms(2019); printSolarTerms(2020); printSolarTerms(2021); printSolarTerms(2022); } } ``` 输出结果为: ``` 2002年的二十四节气日期: 立春,2002-02-04 雨水,2002-02-19 惊蛰,2002-03-06 春分,2002-03-21 清明,2002-04-05 谷雨,2002-04-20 立夏,2002-05-06 小满,2002-05-21 芒种,2002-06-06 夏至,2002-06-22 小暑,2002-07-08 大暑,2002-07-23 立秋,2002-08-08 处暑,2002-08-23 白露,2002-09-08 秋分,2002-09-23 寒露,2002-10-08 霜降,2002-10-23 立冬,2002-11-07 小雪,2002-11-22 大雪,2002-12-07 冬至,2002-12-22 小寒,2003-01-06 大寒,2003-01-21 2003年的二十四节气日期: 立春,2003-02-04 雨水,2003-02-19 惊蛰,2003-03-06 春分,2003-03-21 清明,2003-04-05 谷雨,2003-04-20 立夏,2003-05-06 小满,2003-05-21 芒种,2003-06-06 夏至,2003-06-22 小暑,2003-07-08 大暑,2003-07-23 立秋,2003-08-08 处暑,2003-08-23 白露,2003-09-08 秋分,2003-09-23 寒露,2003-10-08 霜降,2003-10-23 立冬,2003-11-07 小雪,2003-11-22 大雪,2003-12-07 冬至,2003-12-22 小寒,2004-01-06 大寒,2004-01-21 2004年的二十四节气日期: 立春,2004-02-04 雨水,2004-02-19 惊蛰,2004-03-05 春分,2004-03-20 清明,2004-04-04 谷雨,2004-04-19 立夏,2004-05-05 小满,2004-05-20 芒种,2004-06-05 夏至,2004-06-21 小暑,2004-07-07 大暑,2004-07-22 立秋,2004-08-07 处暑,2004-08-22 白露,2004-09-07 秋分,2004-09-22 寒露,2004-10-07 霜降,2004-10-22 立冬,2004-11-06 小雪,2004-11-21 大雪,2004-12-06 冬至,2004-12-21 小寒,2005-01-05 大寒,2005-01-20 2005年的二十四节气日期: 立春,2005-02-04 雨水,2005-02-19 惊蛰,2005-03-05 春分,2005-03-20 清明,2005-04-04 谷雨,2005-04-20 立夏,2005-05-05 小满,2005-05-21 芒种,2005-06-05 夏至,2005-06-21 小暑,2005-07-07 大暑,2005-07-22 立秋,2005-08-07 处暑,2005-08-23 白露,2005-09-07 秋分,2005-09-22 寒露,2005-10-08 霜降,2005-10-23 立冬,2005-11-07 小雪,2005-11-22 大雪,2005-12-07 冬至,2005-12-22 小寒,2006-01-06 大寒,2006-01-20 2006年的二十四节气日期: 立春,2006-02-04 雨水,2006-02-19 惊蛰,2006-03-05 春分,2006-03-20 清明,2006-04-04 谷雨,2006-04-20 立夏,2006-05-05 小满,2006-05-21 芒种,2006-06-06 夏至,2006-06-22 小暑,2006-07-07 大暑,2006-07-23 立秋,2006-08-08 处暑,2006-08-23 白露,2006-09-08 秋分,2006-09-23 寒露,2006-10-08 霜降,2006-10-23 立冬,2006-11-07 小雪,2006-11-22 大雪,2006-12-07 冬至,2006-12-22 小寒,2007-01-05 大寒,2007-01-20 2007年的二十四节气日期: 立春,2007-02-04 雨水,2007-02-19 惊蛰,2007-03-05 春分,2007-03-21 清明,2007-04-05 谷雨,2007-04-20 立夏,2007-05-05 小满,2007-05-21 芒种,2007-06-06 夏至,2007-06-22 小暑,2007-07-07 大暑,2007-07-23 立秋,2007-08-08 处暑,2007-08-23 白露,2007-09-08 秋分,2007-09-23 寒露,2007-10-08 霜降,2007-10-23 立冬,2007-11-07 小雪,2007-11-22 大雪,2007-12-07 冬至,2007-12-22 小寒,2008-01-06 大寒,2008-01-20 2008年的二十四节气日期: 立春,2008-02-04 雨水,2008-02-19 惊蛰,2008-03-05 春分,2008-03-20 清明,2008-04-04 谷雨,2008-04-19 立夏,2008-05-05 小满,2008-05-20 芒种,2008-06-05 夏至,2008-06-21 小暑,2008-07-07 大暑,2008-07-22 立秋,2008-08-07 处暑,2008-08-23 白露,2008-09-08 秋分,2008-09-23 寒露,2008-10-08 霜降,2008-10-23 立冬,2008-11-07 小雪,2008-11-22 大雪,2008-12-07 冬至,2008-12-22 小寒,2009-01-05 大寒,2009-01-20 2009年的二十四节气日期: 立春,2009-02-04 雨水,2009-02-19 惊蛰,2009-03-05 春分,2009-03-20 清明,2009-04-04 谷雨,2009-04-20 立夏,2009-05-05 小满,2009-05-21 芒种,2009-06-06 夏至,2009-06-22 小暑,2009-07-07 大暑,2009-07-23 立秋,2009-08-08 处暑,2009-08-23 白露,2009-09-08 秋分,2009-09-23 寒露,2009-10-08 霜降,2009-10-23 立冬,2009-11-07 小雪,2009-11-22 大雪,2009-12-07 冬至,2009-12-22 小寒,2010-01-06 大寒,2010-01-20 2010年的二十四节气日期: 立春,2010-02-04 雨水,2010-02-19 惊蛰,2010-03-05 春分,2010-03-21 清明,2010-04-05 谷雨,2010-04-20 立夏,2010-05-06 小满,2010-05-21 芒种,2010-06-06 夏至,2010-06-22 小暑,2010-07-07 大暑,2010-07-23 立秋,2010-08-08 处暑,2010-08-23 白露,2010-09-08 秋分,2010-09-23 寒露,2010-10-08 霜降,2010-10-23 立冬,2010-11-07 小雪,2010-11-22 大雪,2010-12-06 冬至,2010-12-21 小寒,2011-01-05 大寒,2011-01-20 201
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值