马黑黑 发表于 2022-3-7 20:54

JS:N多张图片通过自身单击切换的代码分享

实现机制是通过非实体HTML的img元素加载图片,图片url放置于JS数组中。代码属原创,期待点赞:

<div id="myBox" style="margin: auto; width: 760px;text-align: center;"></div>

<script language="javascript">

var idx = 0; //图片索引
var flag = 0; //图片切换标识
//将图片url放入数组
var imgAr = [
        "https://638183.freep.cn/638183/Pic/38/d.jpg",
        "https://638183.freep.cn/638183/Pic/38/c.jpg",
        "https://638183.freep.cn/638183/Pic/38/j.jpg",
        "https://638183.freep.cn/638183/Pic/38/k.jpg"
];
//创建非HTML实体img
var myPic = document.createElement("img"); //创建img元素
myPic.src = imgAr; //加载第一张图片
myPic.style.maxWidth = "760px"; //限制图片最大宽度
myPic.style.cursor = "pointer"; // 鼠标指针样式
document.getElementById("myBox").appendChild(myPic); //追加图像元素
//鼠标指针在图片上移动事件:判断前后切换并显示提示
myPic.onmouseover= function(){
        var w = event.clientX - offset(myPic, "left"); //鼠标指针位置:用于判断flag标识
        flag = (w > this.width/2 ? 1 : 0); //往前还是往后切换
        this.title = (w > this.width/2 ? "前一张" : "后一张"); //提示语
}
//图片单击事件:切换图片
myPic.onclick = function(){
        idx = (flag == 1 ? idx + 1 : idx - 1); //图片索引标识步进
        if(idx >= imgAr.length) idx = 0; //往后切换时到最后一张后从头开始
        if(idx < 0) idx = imgAr.length - 1; //往前切换时到第一张后返回最后一张
        this.src = imgAr; //按预设呈现图片
}
//获取元素偏移总量
function offset(obj,direction){
      let offsetDir = "offset" + direction.toUpperCase()+direction.substring(1);
      let realNum = obj;
      let positionParent = obj.offsetParent;
      while(positionParent != null){
                realNum += positionParent;
                positionParent = positionParent.offsetParent;
      }
      return realNum;
}

</script>

马黑黑 发表于 2022-3-7 20:55

一楼代码能够实现单击图片切换到新的图片的目的,且单击图片左边和右边的切换方式不同。大家可以参考尝试。

樵歌 发表于 2022-3-7 21:12

点美女赞小黑。{:4_170:}

小辣椒 发表于 2022-3-7 21:13

黑黑的新教程,明天争取做一个,今天得下了{:4_187:}

红影 发表于 2022-3-7 21:53

每一句都有解说,这个切换已经看到实例了,很成功。黑黑辛苦了{:4_187:}

红影 发表于 2022-3-7 22:05

创建非HTML实体img,这句没看懂。

马黑黑 发表于 2022-3-7 22:06

樵歌 发表于 2022-3-7 21:12
点美女赞小黑。

反过来说差不多

马黑黑 发表于 2022-3-7 22:07

红影 发表于 2022-3-7 22:05
创建非HTML实体img,这句没看懂。

就是,img元素不是实体元素,是JS虚拟创建的

马黑黑 发表于 2022-3-7 22:08

红影 发表于 2022-3-7 21:53
每一句都有解说,这个切换已经看到实例了,很成功。黑黑辛苦了

辛苦谈不上,这是相对不复杂的实现方式

马黑黑 发表于 2022-3-7 22:13

小辣椒 发表于 2022-3-7 21:13
黑黑的新教程,明天争取做一个,今天得下了

晚安。88

红影 发表于 2022-3-7 22:41

马黑黑 发表于 2022-3-7 22:07
就是,img元素不是实体元素,是JS虚拟创建的

顺着一路赋值,找半天才找到了"myBox"在哪{:4_173:}

红影 发表于 2022-3-7 22:42

马黑黑 发表于 2022-3-7 22:08
辛苦谈不上,这是相对不复杂的实现方式

实际已经挺复杂的呢{:4_173:}

马黑黑 发表于 2022-3-7 22:43

红影 发表于 2022-3-7 22:41
顺着一路赋值,找半天才找到了"myBox"在哪

ID为 myBox 的div是例中唯一的HTML实体元素,它的作用是父元素,虚拟创建的JS img元素依托于它,这是做帖子的需要,也是布局的需要

马黑黑 发表于 2022-3-7 22:46

红影 发表于 2022-3-7 22:42
实际已经挺复杂的呢

这是因为刚刚一边脚踏入门槛的关系

红影 发表于 2022-3-8 15:22

马黑黑 发表于 2022-3-7 22:43
ID为 myBox 的div是例中唯一的HTML实体元素,它的作用是父元素,虚拟创建的JS img元素依托于它,这是做帖 ...

我还没完全理解这个虚拟原始和实体元素,不明白这样做的用处。

红影 发表于 2022-3-8 15:22

马黑黑 发表于 2022-3-7 22:46
这是因为刚刚一边脚踏入门槛的关系

是的,还没习惯。

马黑黑 发表于 2022-3-8 17:46

红影 发表于 2022-3-8 15:22
是的,还没习惯。
也还不熟悉

马黑黑 发表于 2022-3-8 17:48

红影 发表于 2022-3-8 15:22
我还没完全理解这个虚拟原始和实体元素,不明白这样做的用处。

HTML实体元素:

<img src="url" alt="" title="" />

没有这个时,JS创建的img对象,就是非实体的HTML元素

红影 发表于 2022-3-8 21:00

马黑黑 发表于 2022-3-8 17:46
也还不熟悉

嗯嗯,非常的不熟悉。

红影 发表于 2022-3-8 21:01

马黑黑 发表于 2022-3-8 17:48
HTML实体元素:




图片不是可以直接调用的么,为什么要经过一道非实体的过程呢?
页: [1] 2 3
查看完整版本: JS:N多张图片通过自身单击切换的代码分享