JavaScript实现橱窗展示效果

本文实例为大家分享了JavaScript实现橱窗展示效果的具体代码,供大家参考,具体内容如下

1.先搭架子

* {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 800px;
            height: 190px;
            border: 1px solid #000;
            margin: 100px auto;
        }

        ul {
            list-style: none;
            display: flex;
        }

        ul img {
            vertical-align: top;
        }

        .progress {
            width: 100%;
            height: 30px;
            background: #ccc;
        }

        .progress>.line {
            width: 100px;
            height: 100%;
            background: orange;
            border-radius: 15px;
 }
<div class="box">
        <ul>
            <li>
                <img src="images/img1.jpg" alt="">
            </li>
            <li>
                <img src="images/img2.jpg" alt="">
            </li>
            <li>
                <img src="images/img3.jpg" alt="">
            </li>
            <li>
                <img src="images/img4.jpg" alt="">
            </li>
            <li>
                <img src="images/img5.jpg" alt="">
            </li>
            <li>
                <img src="images/img6.jpg" alt="">
            </li>
            <li>
                <img src="images/img7.jpg" alt="">
            </li>
            <li>
                <img src="images/img8.jpg" alt="">
            </li>
            <li>
                <img src="images/img9.jpg" alt="">
            </li>
            <li>
                <img src="images/img10.jpg" alt="">
            </li>
        </ul>
        <div class="progress">
            <div class="line"></div>
        </div>
</div>

2.逻辑部分

拿到需要操作的元素

计算ul的宽度

设置ul的宽度

计算滚动条的宽度

设置滚动条的宽度

监听鼠标按下的事件

  • 拿到滚动条当前的位置
  • 拿到鼠标在滚动条中按下的位置

监听鼠标移动事件

  • 拿到鼠标在滚动条中移动之后的位置
  • 计算偏移位
  • 安全校验
  • 重新设置滚动条的位置
  • 计算图片的滚动距离
  • 重新设置图片的位置
 .box {
           overflow: hidden;
        }

        ul {
            position: relative;
        }

        .progress {
            position: relative;
        }

        .progress>.line {
            position: absolute;
            left: 0;
            top: 0;
  }
//1.拿到需要操作的元素
const oUl = document.querySelector("ul");
const oItems = oUl.querySelectorAll("li");
const oProgress = document.querySelector(".progress");
const oLine = document.querySelector(".line");
const oBox = document.querySelector(".box");

//2.计算ul的宽度
const ulWidth = oItems[0].offsetWidth * oItems.length;

//3.设置ul的宽度
oUl.style.width = ulWidth + 'px';

//4.计算滚动条的宽度
// 滚动条的宽度/滚动条滚动范围 = 容器的宽度/内容的范围
const progressWidth = oProgress.offsetWidth;
const boxWidth = oBox.offsetWidth;
const lineWidth = boxWidth / ulWidth * progressWidth;

//5.设置滚动条的宽度
oLine.style.width = lineWidth + 'px';
// 计算滚动条最大能够滚动的范围
const maxLineX = progressWidth - lineWidth;
// 计算图片最大能够滚动的范围
const maxImgX = boxWidth - ulWidth;

 //6.监听鼠标按下的事件
oLine.onmousedown = function(e) {

e = e || window.e;
//a.拿到滚动条当前的位置
let begin = parseFloat(oLine.style.left) || 0;

//b.拿到鼠标在滚动条中按下的位置
let mouseX = e.pageX - oBox.offsetLeft;

//7.监听鼠标移动事件
oLine.onmousemove = function(e) {
e = e || window.e;
//c.拿到鼠标在滚动条中移动之后的位置
let moveMouseX = e.pageX - oBox.offsetLeft;

//d.计算偏移位
let offsetX = moveMouseX - mouseX + begin;

//e.安全校验
offsetX = offsetX < 0 ? 0 : offsetX;
offsetX = offsetX > maxLineX ? maxLineX : offsetX;

 //f.重新设置滚动条的位置
oLine.style.left = offsetX + 'px';

//g.计算图片的滚动距离
// 滚动条滚动的距离 / 滚动条最大能够滚动的范围 = 图片滚动的距离 / 图片最大能够滚动的范围
// 滚动条滚动的距离 / 滚动条最大能够滚动的范围 * 图片最大能够滚动的范围 = 图片滚动的距离
const imgOffsetX = offsetX / maxLineX * maxImgX;

// h.重新设置图片的位置
      oUl.style.left = imgOffsetX + "px";
            };
        };
        document.onmouseup = function() {
            oLine.onmousemove = null;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • js实现橱窗展示效果

    本文实例为大家分享了js实现橱窗展示的具体代码,供大家参考,具体内容如下 思路 1.获取需要的标签 2.求出滚动条的长度(公式:滚动条长度 = ( 盒子的宽度 / 内容的宽度) * 盒子的宽度) 3.监听鼠标按下事件:3 设置起始位置 4.监听鼠标的移动: 4.1求出移动的位置 4.2判断滚动条的位置(防超出) 4.3 移动滚动条.商品滚动(公式:内容走的距离 = (内容的长度 - 盒子的长度) / (盒子长度 - 滚动条的长度) * 滚动条走的距离): 5.监听鼠标的离开事件:把鼠标的移动事件

  • JS实现商品橱窗特效

    本文实例为大家分享了JS实现商品橱窗特效的具体代码,供大家参考,具体内容如下 知识点 换算公式 ① 滚动条长度 = ( 盒子的宽度 / 内容的宽度) * 盒子的宽度 滚动条长度/盒子的长度 = 盒子的长度/内容的长度 ② 内容走的距离 = (内容的长度 - 盒子的长度)/ (盒子的长度 - 滚动条的长度)* 滚动条走的距离 运行效果 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset

  • JavaScript实现橱窗展示效果

    本文实例为大家分享了JavaScript实现橱窗展示效果的具体代码,供大家参考,具体内容如下 1.先搭架子 * { margin: 0; padding: 0; } .box { width: 800px; height: 190px; border: 1px solid #000; margin: 100px auto; } ul { list-style: none; display: flex; } ul img { vertical-align: top; } .progress { w

  • javascript搜索框效果实现方法

    本文实例讲述了javascript搜索框效果实现方法.分享给大家供大家参考.具体实现方法如下: <!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">

  • Javascript 实现放大镜效果实例详解

    Javascript 实现放大镜效果 今天做任务的时候,有一个任务就是让实现电商网站常用的放大镜效果,类似于这样的放大镜效果效果,之前并没有做过这种放大镜效果,刚开始的思路是对图片进行裁剪,但是后来发现实在是难以实现,于是求助了万能的谷歌,发现一个很好的思路就是,展示区是一小块可视区域,给他一个图片,超出可视区域的部分设为隐藏,有了这个思路,这个效果就能够很好的实现了,先看一下HTML结构! <div id="pic_wrap"> <div id="floa

  • JavaScript 消息框效果【实现代码】

    警告框 alert(); 确认框 var message=confirm("你喜欢javascript吗"); if(message==true){ document.write("很好,加油"); }else{ document.write("js功能强大,要学习哦"); } 提问框 prompt("文本","默认值"); var myname=prompt(请输入你的姓名); if(myname!=nu

  • JavaScript无缝滚动效果的实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <!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" xml:lang="en"&

  • JavaScript实现打字效果的方法

    本文实例讲述了JavaScript实现打字效果的方法.分享给大家供大家参考.具体实现方法如下: <input type="button" onclick='start("高考了")' value="start"/> <input type="text" id="here" /> <script type="text/javascript"> funct

  • javascript实现拖放效果

    本文实例为大家分享的是一个拖放的效果,参考的代码,重构以下,加以理解学习. 首先来看效果: 拖动div 拖放状态:未开始 [程序说明] 拖动原理:其实就是在拖动块上监听mousedown事件,鼠标点击时,通过事件对象获取对应的坐标参数.然后鼠标移动时再监听document上的mousemove事件,获取鼠标的clientX 和clientY坐标然后设置拖动块的left 和 top. 首先是监听mousedown事件 复制代码 代码如下: EventUtil.addEventHandler(thi

  • JavaScript 仿歌词效果

    JavaScript仿歌词效果 var message="Welcome to JavaScript Fairyland!" var neonbasecolor="gray" var neontextcolor="33ff33" var flashspeed=100 var n=0 if (document.all){ document.write('') for (m=0;m'+message.charAt(m)+'') document.wr

  • javascript图片滑动效果实现

    本文为大家分享了javascript图片滑动效果实现方法,具体内容如下,先看一下效果图: 鼠标滑过那张图,显示完整的哪张图,移除则复位: 简单的CSS加JS操作DOM实现: <!doctype html> <html> <head> <meta charset="UTF-8"> <title>sliding doors</title> <link rel="stylesheet" href

  • JavaScript运动减速效果实例分析

    本文实例讲述了JavaScript运动减速效果.分享给大家供大家参考.具体如下: 这段代码可帮助利用JS从事游戏编程的朋友,它主要实现一种运行减速缓冲的效果,代码精简,很不错. 运行效果如下图所示: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

随机推荐