DOM操作经典案例

24 篇文章 0 订阅
9 篇文章 0 订阅

百度换肤案例

百度换肤案例就是当你点击一张图片时,当前的背景图片就为你所点击的这张图片,实现起来也比较简单,就是更改一下backgroundImage的url路径
js代码:

 <script>
        var img=document.querySelectorAll('img');  //获取所有图片元素
        for(var i=0;i<img.length;i++){
            img[i].onclick=function() {   //为每张图片绑定点击事件
                document.body.style.backgroundImage="url("+this.src+")";
                //更改body的背景图片,切记,要加 url 
            }
        }
 </script>

鼠标移进移出变色(行变色)

鼠标经过变色这个是比较常见的,它的原理就是当经过这个元素时,为这个原属添加一个样式(直接style设置也行),当鼠标离开后就移除这个样式
两个事件:onmouseover onmouseout;
js代码:

<script>
var tr=document.querySelector('tbody').querySelectorAll("tr");  //获取你需要经过改变样式的元素
	var oldColor;  //先准备一个变量,用来接等会临时经过元素原有的颜色
	for(var i=0;i<tr.length;i++){
		tr[i].onmouseover=function(){   //当鼠标经过就执行,
		oldColor=this.style.backgroundColor; //先将原有的背景颜色保存
		this.className += ' bg';  //追加型的样式
	};
		tr[i].onmouseout = function() { //当鼠标离开元素时
			this.classList.remove('bg');   //先移除刚刚追加的样式
			this.style.backgroundColor=oldColor; //在把原有的样式重新给该元素
			oldColor=null;  //释放内存(留着也行)
		}
	}
</script>

表单全选全取消案例

这个案例就是当点击一个全选按钮的时候,这一组的复选框全部选中,或者当这一组复选框全部选中后,全选按钮自动选中
js代码

    <script>
        var selectAll=document.getElementById("j_cbAll"); //获取全选按钮
        var btns=document.querySelectorAll("#j_tb input"); //获取那一组复选框
        selectAll.onclick=function() {  //给全选按钮添加事件
            for(var i=0;i<btns.length;i++){ //当全选按钮被点击后,
                btns[i].checked=this.checked;   //那一组复选框的状态需要和全选按钮的状态一致
            }
        };
        for(var i=0;i<btns.length;i++){  //给每个复选框添加点击验证当前组是否全部勾选
            btns[i].onclick=function() {
                var flag=true;   //这个变量用来决定全选按钮是否要被勾上
                for(var j=0;j<btns.length;j++){
                    if(!btns[j].checked){   //如果发现有一个未选中,
                        flag=false;    //那么flag就为false,全选按钮就不要勾上
                        break;   // 此次循环可以直接退出
                    }
                }
                selectAll.checked=flag;  //更据上方的判定,来决定是否要勾起
            }
     }
    </script>

tag导航栏切换案例

这个案例算是为非常经典的,而且非常常用的一个功能,点击相应的模块,显示相应的模块内容
js代码

<script>
        var li = document.querySelectorAll('li'); //我是用li元素来当相应的导航栏,所以先获取这些li
        var div = document.getElementsByClassName("item");  //首先所有的模块内容都是隐藏起来的,display值为none,我将它放在一个样式表里,方便以后的优化
        for(var i=0;i<li.length;i++){
            li[i].setAttribute('index',i);  //先给每个导航模块添加一个自定义属性,值为i,方便下面操作
            li[i].onclick=function() {
                for(var i=0;i<li.length;i++){
                    li[i].className='';  //首先将所有的导航模块的样式清空,一会再加,也可以使用移除指定样式,
                }
                this.className='current';  //给你点击的导航模块添加样式
                for(var j=0;j<div.length;j++){  //接下来就是显示相对应的模块内容了
                    div[j].removeAttribute('style'); //由于我是临时设置元素的display的,所以在style里,我先将这个属性移除,也可以直接div[j].style.display='none';
                }
                div[this.getAttribute('index')].style.display='block'; //设置元素的display为显示
            }
        }
    </script>

京东详情页放大镜案例

这是一个将鼠标移动到商品图上,然后再右边放大它的局部图片,让用户看的更仔细
代码:


    <div class="preview_img">
        <img src="s3.png" alt="">
        <div class="mask"></div>
        <div class="big">
            <img src="big.jpg" alt="" class="bigImg">
        </div>
    </div>

    <script>
        window.addEventListener('load', function() {
            var preview_img = document.querySelector('.preview_img');
            var mask = document.querySelector('.mask');
            var big = document.querySelector('.big');

            preview_img.addEventListener('mouseover', fn1);   //添加鼠标再图片上
            function fn1(e) {
                mask.style.display = big.style.display = 'block';    //再图片上将预准备的两个盒子展示
            }
            preview_img.addEventListener('mouseout', fn2);   //鼠标离开将临时的盒子隐藏
            function fn2(e) {
                big.style.display = mask.style.display = 'none';
            }
            preview_img.addEventListener('mousemove', fn3);   //添加鼠标再图片上移动的监听事件
            function fn3(e) {
                var x = e.pageX - this.offsetLeft;     // 获取鼠标再盒子里的坐标
                var y = e.pageY - this.offsetTop;
                var maskX = x - mask.offsetWidth/2;    //为鼠标移动设置到半透明盒子的中心做准备
                var maskY = y - mask.offsetHeight/2;  
                var pX=preview_img.offsetWidth-mask.offsetWidth;  //获得半透明的盒子最大移动的距离
                var pY=preview_img.offsetHeight-mask.offsetHeight;
                maskX <= 0 ? maskX = 0 : (maskX >= pX ? maskX = pX : maskX);  //判断鼠标的坐标,防止半透明的盒子跑出边界
                maskY <= 0 ? maskY = 0 : (maskY >= pY ? maskY = pY : maskY);
                mask.style.left = maskX + 'px';   //设置半透明盒子位置
                mask.style.top = maskY + 'px';
			//右边的放大图的设置
                var bigImg=document.querySelector('.bigImg');   //获取图片
                var bigMax=bigImg.offsetWidth-big.offsetWidth;   //获取这张图片最大的移动距离,用图片的宽度减盒子的宽度
 //因为图片的宽度比盒子的宽度大,盒子设置了溢出隐藏,等会按照比例来移动就可以实现它们所对应的放大效果
                var bigX=maskX*bigMax/pX;  //获取比例,大盒子/小盒子的与大图片/小图片的比例相等,所以可以获得大图片所要移动的距离
                var bigY=maskY*bigMax/pY;
                bigImg.style.left=-bigX+'px';  //设置大图片移动的距离
                bigImg.style.top=-bigY+'px';

				//不写下面这个判断会有一个bug,就是如果鼠标移动的太快,瞬间冲小盒子里移动到大盒子里,
				//根据mouseout事件会隐藏掉这两个盒子,但是不会,我也不知道为什么,然后加一个这样的判断,就可以解决了
                if(x>(this.offsetLeft+this.offsetWidth)){
                    big.style.display = mask.style.display = 'none';
                }
            }
        });
    </script>

需要注意不要让半透明盒子跑出边界
还有这里要注意的就是一个移动比例
比例公式:
半透明盒子移动的距离 / 半透明盒子最大能移动的距离 = 大图片需要移动的距离 / 大图片最大能移动的距离

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《JavaScript DOM编程艺术》第二版是一本非常经典的前端开发书籍,由作者Jeremy Keith和Jeffrey Sambells合作编写而成。该书主要介绍了使用JavaScript和DOM技术进行网页开发的知识,涵盖了DOM操作、事件监听、表单验证、AJAX等内容。 本书首先讲解了DOM的基础知识,包括节点、元素、属性、文本等概念,并介绍了通过JavaScript对DOM进行操作的方法。然后,通过实例讲解了如何根据用户的交互行为来实现动态效果,如当用户点击某个按钮时改变网页的背景色等。 此外,本书还介绍了如何利用AJAX技术进行异步数据交互,比如通过JavaScript动态加载内容等。同时,本书也提供了一些工具和技巧来提高网页的性能和用户体验,比如浏览器兼容性、缓存、图片优化等。 总之,《JavaScript DOM编程艺术》第二版是一本前端开发必读的书籍,可以帮助读者全面掌握JavaScript和DOM技术,在开发网页时提高效率和质量。而PDF版本的书籍更方便读者随时随地学习,建议前端开发人员可以认真阅读和应用到实践中。 ### 回答2: 《JavaScript DOM编程艺术第二版》是一本深入浅出的JavaScript和DOM编程入门书籍,适合初学者学习。 该书共有18章,从JavaScript基础语法和DOM结构开始讲起,一步步引导读者学习Javascript与DOM编程。其中介绍了文档对象模型(DOM)的概念、DOM节点、节点属性与操作等重要知识点,并通过实例和练习帮助读者更好地理解如何使用DOM进行网页设计和开发。此外,书中还介绍了如何使用JavaScript制作动态网页、表单验证、浏览器兼容性问题等实用的开发技巧,为读者提供了丰富的编程经验。 书中使用简洁易懂的语言,结合大量实例和练习,让读者可以快速掌握JavaScript与DOM的核心概念和编程技巧。作者还在书中提供了很多实战案例,让读者可以将所学的知识应用到实际开发中,并且让读者更好地理解如何进行项目开发。 总之,《JavaScript DOM编程艺术第二版》是一本不可多得的优秀JavaScript与DOM编程入门教材,读者只需要具备基本的JavaScript和HTML/CSS知识,即可轻松掌握书中内容,快速提高前端开发能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值