前端day04(放大广告图案例[放大镜])

1- history

<button>按钮</button>
    <button>回退上一历史</button>
    <button>go到下一个历史</button>
    <a href="1.html">1</a>
    <a href="2.html">2</a>
    <a href="3.html">3</a>
    <a href="4.html">4</a>
    <script>
        var button = document.querySelectorAll("button")[0];
        button.onclick = function(){
            // 获取历史记录的长度
            console.log(history.length);
        }
        var btn = document.querySelectorAll("button")[1];
        btn.onclick = function(){
            history.back();
            console.log("回退上一历史");
        }
        var btn1 = document.querySelectorAll("button")[2];
        btn1.onclick = function(){
            history.go(1);
            console.log("前进到上一个历史");
        }

history.back();回退一步

history.go(1);前进一步

history.forward();前进一步

2- 定时器

定时器
setTimeout(function(){

     },7000);
循环定时器(不会停止)
setInterval(function(){
    
        },3000)

3- 时间显示

写一个功能去解析当前时间--利用循环定时器不停调用==>从而实时显示到h2上

function fn(date){
            //写一个数组遍历获取星期
            var dayArr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
            //获取年
            var y = date.getFullYear();
            //获取月(月从0开始,所以要加1)
            var m = date.getMonth()+1;
            //获取天(日)
            var n = date.getDate();
            //获取小时
            var q = date.getHours();
            q = q<10?"0"+q:q;
            var mm = date.getMinutes();
            mm = mm<10?"0"+mm:mm;
            //getDay()获取的是星期几
            var day = date.getDay();
            var s = date.getSeconds();
            s= s<10?"0"+s:s;
            // console.log(y,m,n,h,mm,s);
            var str = y+"年"+m+"月"+n+"日"+dayArr[day]+"-"+q+":"+mm+":"+s;
            h2.innerHTML = str;
            // console.log(str);
        }

fn(new Date();调用该方法,并放入循环定时器中👇

setInterval(function(){

            function fn(date){
            var dayArr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
            var y = date.getFullYear();
            var m = date.getMonth()+1;
            var n = date.getDate();
            var q = date.getHours();
            q = q<10?"0"+q:q;
            var mm = date.getMinutes();
            mm = mm<10?"0"+mm:mm;
            var day = date.getDay();
            // console.log(day);
            var s = date.getSeconds();
            s= s<10?"0"+s:s;
            // console.log(y,m,n,h,mm,s);
            var str = y+"年"+m+"月"+n+"日"+dayArr[day]+"-"+q+":"+mm+":"+s;
            h2.innerHTML = str;
            // console.log(str);
        }

            fn(new Date());

        })

4-广告关闭

需求:

<!-- 1、打开网页3秒后弹出广告 -->

<!-- 2、广告位置随机一点 -->

<!-- 3、观看5s后可以关闭 -->

<!-- 4、点击关闭后,3s之后关闭广告 -->

==============================================================

<!-- 1、打开网页3秒后弹出广告 -->

// <!-- 1、打开网页3秒后弹出广告 -->
        setTimeout(function () {
            // 广告随机出现的位置坐标
            // <!-- 2、广告位置随机一点 -->
            var x = parseInt(Math.random() * 1000);
            var y = parseInt(Math.random() * 800);
            // 给广告元素添加边偏移
            div.style.left = x + "px";
            div.style.top = y + "px";
            // 显示广告
            div.style.display = "block";
            // 定义s=5就是设置倒计时的时间
            var s = 5;
            // <!-- 3、观看5s后可以关闭 -->
            // 开始倒计时,倒计时结束后激活按钮
            var timer = setInterval(function () {
                // 每次执行定时器要减掉1秒
                s--;
                // 同步把秒数更新到按钮的文字上
                btn.innerText = "关闭(" + s + "s" + ")";
                // 判断倒计时是否结束
                if (s <= 0) {
                    // 激活按钮
                    btn.disabled = false;
                    // 清除定时器==>循环定时器清除
                    clearInterval(timer);
                    // 更新按钮文字为"关闭""
                    btn.innerText = "关闭";
                    // 更新按钮样式
                    btn.className = ".gengxin";
                }
            }, 1000)
        }, 3000)

<!-- 2、广告位置随机一点 -->

            // <!-- 2、广告位置随机一点 -->
            var x = parseInt(Math.random() * 1000);
            var y = parseInt(Math.random() * 800);
            // 给广告元素添加边偏移
            div.style.left = x + "px";
            div.style.top = y + "px";
            // 显示广告
            div.style.display = "block";

<!-- 3、观看5s后可以关闭 -->

// 定义s=5就是设置倒计时的时间
            var s = 5;
            // <!-- 3、观看5s后可以关闭 -->
            // 开始倒计时,倒计时结束后激活按钮
            var timer = setInterval(function () {
                // 每次执行定时器要减掉1秒
                s--;
                // 同步把秒数更新到按钮的文字上
                btn.innerText = "关闭(" + s + "s" + ")";
                // 判断倒计时是否结束
                if (s <= 0) {
                    // 激活按钮
                    btn.disabled = false;
                    // 清除定时器==>循环定时器清除
                    clearInterval(timer);
                    // 更新按钮文字为"关闭""
                    btn.innerText = "关闭";
                    // 更新按钮样式
                    btn.className = ".gengxin";
                }
            }, 1000)

<!-- 4、点击关闭后,3s之后关闭广告 -->

// 按钮点击后的功能代码
        btn.onclick = function () {
            // 当点击按钮后,应该立即禁用按钮,防止二次点击
            btn.disabled = true;
            // 定义s=5就是设置倒计时的时间
            var s = 5;
            // 更新按钮文字为"5s后自动关闭""
            btn.innerText = s + "后自动关闭";
            // 开始倒计时
            var timer = setInterval(function () {
                // 每次执行定时器要减掉1秒
                // s--就是s先参加其他运算,然后自身减1
                s--;
                console.log(s);
                // 判断倒计时是否结束
                if (s <= 0) {
                    // 结束时清除定时器
                    clearInterval(timer);
                    // 最后隐藏广告
                    div.style.display = "none";
                }
                // 如果没有结束则更新文字
                btn.innerText = s + "后自动关闭";
            }, 1000)
        }

5- window.οnlοad=function(){}

window.onload的用法:

该方法用于在网页加载完毕后立刻执行的操作,即当html加载完毕后,立刻执行某个方法等。

因为页面中的代码一般情况下按照,从上到下,从左到右的顺序执行。

所以当js代码需要获取页面中的元素时,如果script标签在元素的前面,需要加window.onload;如果script放在了元素后面,就不需要加 window.onload。

6-计算与目标日期相差的时间

逻辑:

1->获取当前时间并切换成毫秒值var nowTime = (new Date()).valueOf();

2->获取目标时间并切换成毫秒值var targetTime = (new Date("2024-02-09 00:00:00")).valueOf();

3->相差时间为time = targetTime-nowTime

var day = parseInt(time/1000/60/60/24);
var h = parseInt(time/1000/60/60%24);
var m =  parseInt(time/1000/60%60);
var s =  parseInt(time/1000%60);
span.innerText = day + "天" +h + "小时" + m + "分" + s + "秒";

7- offset

<div class="a">
        <div class="b">

        </div>
    </div>
//父元素有定位就是相对父元素的位置,没有定位就是在整个界面中的位置
console.log(div2.offsetLeft);
console.log(div2.offsetTop);
// 父元素没有定位就是body,有就是距离最近的有定位的元素
console.log(div2.offsetParent);

案例5:放大镜(鼠标移入广告图后放大)

逻辑需求:

  1. 设置3个div分别放置原图(outBox),鼠标移入后的区域框(moveBox),以及放大后的区域(bigBox)。

  1. 鼠标移入outBox 显示 moveBox 与bigBox;鼠标移出outBox 隐藏 moveBox 与 bigBox。且在鼠标移入moveBox后让moveBox在盒子内跟随鼠标。

  1. 计算鼠标在盒子中的位置,使用 var x = event.pageX - outBox.offsetLeft;

var y = event.pageY - outBox.offsetTop;

同时还要计算边界值,不让moveBox预览框溢出。

  1. 设置放大图片的移动比例,在预览框移动时,放大的图片按反方向移动显示

==============================================================

<!-- 1、鼠标移入outBox 显示 moveBox 与bigBox -->

        outBox.onmouseenter = function(){
            moveBox.style.display = "block";
            bigBox.style.display = "block";
        }

<!-- 2、鼠标移出outBox 隐藏 moveBox 与bigBox -->

        outBox.onmouseleave = function(){
            moveBox.style.display = "none";
            bigBox.style.display = "none";
        }

<!-- 3、让moveBox在盒子内跟随鼠标,并显示放大图 -->

        outBox.onmousemove = function(){
            // console.log(event);
            // 计算鼠标在盒子中的位置
            var x = event.pageX - outBox.offsetLeft;
            var y = event.pageY - outBox.offsetTop;
            // console.log(x,y);
            // 计算moveBox在盒子内的位置
            
            // 计算边界值,不让黄色预览框溢出
            var moveX = x - moveBox.offsetWidth/2;
            var moveY = y - moveBox.offsetHeight/2;
            if(moveX<0){
                moveX=0;
            }
            else if (moveX >outBox.offsetWidth - moveBox.offsetWidth){
                moveX = outBox.offsetWidth - moveBox.offsetWidth;
            }
            if(moveY<0){
                moveY=0;
            }
            else if(moveY>outBox.offsetHeight -moveBox.offsetHeight){
                moveY=outBox.offsetHeight -moveBox.offsetHeight;
            }

            moveBox.style.left =moveX  + "px";
            moveBox.style.top =moveY + "px";

            // 比例
            // 大图片(800) - 大图片所在的盒子(500) / 预览框(400)  - 鼠标移入时的透明盒子(300)
            var bili = (img.offsetHeight-bigBox.offsetHeight)/(outBox.offsetHeight-moveBox.offsetHeight);

            // 移动图片
            img.style.left = -moveX*bili +"px";
            img.style.top = -moveY*bili +"px";

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值