页面中的骚操作 - 原生JS实现焦点图切换

531 阅读5分钟

我们前面学习的语法都是 JS 基础的语法,我们这一章叫做 DOM 操作。是不是很厉害,说了一个你不会的术语。

什么是 DOM ,其实就是 Document Object Model 英文单词的缩写,翻译成中文意思就是 文档对象模型

文档 Document :文档其实就是我们写的那个网页。

对象 Object :在 JS 世界中,把页面的中一个个的标签都变成一个个的对象,查找标签的过程就是找对象的过程。

模型 Model:意识借助实体虚拟表达目的的物件(百度百科查的,原本以为自己懂的,一查就不懂了,算了不管了)。

其实我们用通俗的语言解释就是,DOM 就是 JS 提供给我们用来操作网页标签的一系列功能,懂了吗。

说白了DOM 就相当于 JS 的一个小弟,这个小弟专门用来操作网页的,所以 DOM 操作也是 JS 的操作。

概念了解完了,那我们再看一下学完这章之后能实现的炫酷效果。

中间的图片在鼠标移入的时候居然能动起来了,WoW!!!

是不是很激动好想学,那我们开始吧。

首先我们需要先把之前的焦点图结构修改一下:

原本的 HTML 结构:

<div class="carousel">
    <img src="images/carousel.jpg" alt="">
</div>

修改后的 HTML 结构:


<div class="carousel">
    <ul class="carousel-image">
        <!-- 焦点图的两张图片 -->
        <li class="img01"><a href="#"><img src="images/carousel.jpg" alt=""></a></li>
        <li class="img02"><a href="#"><img src="images/20161021170458_5809da3aaa0da.jpg" alt=""></a>
    </li>
    </ul>
    <ol class="carousel-icon">
        <!-- 焦点图的两个小图标 -->
        <li class="icon01"></li>
        <li class="icon02"></li>
    </ol>
</div>

我们再把焦点图的 CSS 样式写一下:


.carousel {
    position: relative;
    width: 880px;
    height: 200px;
    overflow: hidden;
}
.carousel-image li {
    position: absolute;
    /* CSS 过渡 */
    transition: all 0.4s;
}

.carousel-icon {
    position: absolute;
    right: 30px;
    bottom: 10px;
}
.carousel-icon li {
    width: 19px;
    height: 17px;
    margin: 0 5px;
    float: left;
    cursor: pointer;
    /* CSS 过渡 */
    transition: all 0.4s;
}
.carousel-icon .icon01 {
    background: url(../images/newicon_20160225.png) no-repeat -67px -265px;
}
.carousel-icon .icon01:hover {
    background: url(../images/newicon_20160225.png) no-repeat -68px -283px;
}
.carousel-icon .icon02 {
    background: url(../images/newicon_20160225.png) no-repeat -44px -265px;
}
.carousel-icon .icon02:hover {
    background: url(../images/newicon_20160225.png) no-repeat -44px -283px;
}

以上工作做完后,就可以看到下图的静态布局了,但是鼠标移入小图标的时候,大图片还是不能切换。

切换大图片的工作,就要有请我们的 JS 隆重登场啦。

首先们先理一下效果实现的思路:

  1. 在页面中查找到第一个叉叉形状的小图标对应的标签。
  2. 当鼠标移入第一个小图标的时候,找到第一张图片把它显示出来,找到第二张图片把它隐藏了。
  3. 在页面中继续查找到第二个三角形的小图标对应的标签。
  4. 当鼠标移入第二个小图标的时候,找到第二张图片把它显示出来,找到第一张图片把它隐藏了。

在梳理的思路中,我们发现有个步骤出现了好几次,就是要查找页面的标签,也就是找到页面中的小图标和大图片。

前面介绍过,在 JS 世界中,标签就是对象,找标签都叫做找对象。

那我们接下来学习 JS 的 DOM 操作中如何查找标签(对象)吧。

在文档中通过选择器查找标签。

document.querySelector('选择器')

如果要查找到小图标,第一个小图标身上有一个类名叫 icon01 ,所以我们要查找第一个小图标的时候可以用以下代码查找。

参考代码如下:

document.querySelector('.icon01')

注意别调到坑里了,选择器部分是 .icon01 注意不要漏掉了前面的小点 .

担心大家不懂,解释一下单词:

单词 中文翻译 音标
document 文档 英 /ˈdɒkjumənt/
query 查询,查找 英 /ˈkwɪəri/
Selector 选择器 英 /sɪˈlektə(r)/

此处是网友感激给的小心心。

找到对应第一个小图标后,我们通过 JS 代码给小图标添加一个鼠标移入后弹窗的效果。

如何添加一个当鼠标移到小图标上方时触发的事件呢?

参考代码升级为:

document.querySelector('.icon01').addEventListener('mouseover', function () {
    alert('鼠标移入了小图标,这是一个弹窗,是不是很溜。');
});

又担心大家不会,再解释一下单词:

单词 中文翻译 音标
add 添加 英 /æd/
Event 事件 英 /ɪˈvent/
Listener 监听器 英 /ˈlɪsənə(r)/
mouse 鼠标 英 /maʊs/
over 从……上方 英 /ˈəʊvə(r)/
function 函数 英 /ˈfʌŋkʃn/
alert 弹窗 英 /əˈlɜːt/

我们再加点料,把鼠标移入弹窗的效果变成鼠标移入切换第一张图片。

那具体怎么实现的切换呢,我们现在再把思路理一下。

  • 当鼠标移入第一个小图标的时候:
    1. 找到第一张大图片把它显示出来
    2. 找到第二张大图片把它隐藏了

参考代码修改为:

document.querySelector('.icon01').addEventListener('mouseover', function () {
    document.querySelector('.img01').style.opacity = 1;      // 第一张图不透明度变 1,显示出来
    document.querySelector('.img02').style.opacity = 0;		 // 第二张图不透明度变 0,被隐藏了
});

又出现新单词,翻译继续一下

单词 中文翻译 音标
style 样式 英 /staɪl/
opacity 不透明度 英 /əʊˈpæsəti/

如果要移入第二个小图标的时候,能切换第二张图,参考代码如下:

// 这次是鼠标移入第二个小图标的效果
document.querySelector('.icon02').addEventListener('mouseover', function () {
    document.querySelector('.img02').style.opacity = 1;		 // 第二张图不透明度变 1,显示出来
    document.querySelector('.img01').style.opacity = 0;		 // 第一张图不透明度变 0,被隐藏了
});

到这篇文件为止,DOM 实现焦点图切换的效果就学到这里啦,同时记得文章还有配套的视频哦,到时候会一并在文章页上体现出来,如果各位小伙伴还有其他的需要,想学习其它的前端知识,可以留言,我们会为大家增加新的文章,祝愿各位小伙伴在前端的道路上一切顺利哦!!