原生弹窗拖拽代码demo+简单的抽奖

拖拽效果

效果:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>弹窗拖拽</title>
    <style>
        *{margin:0;padding:0;}
        .box{position: absolute;width: 400px;height: 300px;top:100px;left:100px;border:1px solid #001c67;background: #}
        .move{position: absolute;width: 100px;height: 100px;top:100px;left:150px;border:1px solid #000;}
        .move:hover{cursor: move;}
        .close{position: absolute;width: 30px;height: 30px;top:0px;right:0px;background:red;text-align: center;line-height: 30px;}
    </style>
    <script>
        window.onload=function(){
            var oMove=document.getElementById(‘move‘);
           // 拖曳
           oMove.onmousedown=fnDown;
           // 关闭
           var oClose=document.getElementById(‘close‘);
           oClose.onclick=function(){
              document.getElementById(‘box‘).style.display=‘none‘;
           }
        }
        function fnDown(event){
            event = event || window.event;
            var oDrag=document.getElementById(‘box‘),
                // 光标按下时光标和面板之间的距离
                disX=event.clientX-oDrag.offsetLeft,
                disY=event.clientY-oDrag.offsetTop;
            // 移动
            document.onmousemove=function(event){
                event = event || window.event;
                var l=event.clientX-disX,
                    t=event.clientY-disY,
                    // 最大left,top值
                    leftMax=(document.documentElement.clientWidth || document.body.clientWidth)-oDrag.offsetWidth,
                    topMax=(document.documentElement.clientHeight || document.body.clientHeight)-oDrag.offsetHeight;
                if(l<0)  l=0;
                if(l>leftMax) l=leftMax;
                if(t<0)  t=0;
                if(t>topMax) t=topMax;
                oDrag.style.left=l+‘px‘;
                oDrag.style.top=t+‘px‘;
            }
            // 释放鼠标
            document.onmouseup=function(){
                document.onmousemove=null;
                document.onmouseup=null;
            }
        }
    </script>
</head>
<body>
    <div class="box" id="box">
        <div class="move" id="move">拖拽区域</div>
        <div class="close" id="close">X</div>
    </div>
</body>
</html>

主要注意几点:

1.event,IE兼容问题

2.点击鼠标时要先判断鼠标与面板之间的距离

3.要判断弹窗与浏览器整个区域的距离,不能让弹窗跑出浏览器外的区域

4.松开鼠标要解除事件绑定,不然会有bug

简单的抽奖(可用键盘)

效果:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>简单抽奖(可用键盘)</title>
    <style>
        *{margin:0;padding:0;}
        .box{width: 400px;height: 300px;margin:50px auto;background: red}
        .title{color: #fff;font-size: 30px;font-weight:700px;padding: 50px 0;text-align: center;height:40px;}
        .btm{text-align: center;padding:20px 0;}
        .btm a{display: inline-block;width: 120px;height:60px;line-height: 60px;background: #FEF097;margin:0 10px;text-decoration: none;}
    </style>
    <script>
        var data=[‘Iphone‘,‘Ipad‘,‘笔记本‘,‘相机‘,‘谢谢参与‘,‘充值卡‘,‘购物券‘],
            timer=null,//定时器
            flag=0;//阻止多次回车
        window.onload=function(){
            var play=document.getElementById(‘play‘),
                stop=document.getElementById(‘stop‘);
            // 开始抽奖
            play.onclick=playFun;
            stop.onclick=stopFun;
            // 键盘事件
            document.onkeyup=function(event){
                event = event || window.event;
                // 回车键的code值:13
                if(event.keyCode==13){
                    if(flag==0){
                        playFun();
                        flag=1;
                     }else{
                           stopFun();
                           flag=0;
                     }
                  }
               }
               function playFun(){
                var title=document.getElementById(‘title‘);
                var play=document.getElementById(‘play‘);
                clearInterval(timer);
                timer=setInterval(function(){
                   var random=Math.floor(Math.random()*data.length);
                   title.innerHTML=data[random];
                },60);
                play.style.background=‘#999‘;
            }
            function stopFun(){
                clearInterval(timer);
                var play=document.getElementById(‘play‘);
                play.style.background=‘#FEF097‘;
            }
        }
    </script>
</head>
<body>
    <div class="box">
        <div class="title" id="title">淘家趣抽奖</div>
        <div class="btm">
            <a href="javascript:;" id="play">开始</a>
            <a href="javascript:;" id="stop">停止</a>
        </div>
    </div>
</body>
</html>

 注意点:

1.随机数,取数组的其中一个;取0-n之间:Math.random()*(n+1)

2.定时器,开始抽奖时要停止前面的一次抽奖,不然会定时器重叠

3.按键操作,要判断是抽奖进行中,还是未开始,所有设置了变量 flag

时间: 2024-12-10 00:23:01

原生弹窗拖拽代码demo+简单的抽奖的相关文章

React.js实现原生js拖拽效果及思考

一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件

再谈React.js实现原生js拖拽效果

前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目地就是要尽量避免直接操作dom元素,所以我们在对dom元素进行操作的时候需要注意,我之前为了获取form的参数就直接用了var dragBox=document.getElementById('form')去找dom,但是其实记录from的初始位置,可以在其子组件更新父组件参数的时候调用.即在MyF

Xcode如何拖拽选中文字、拖拽代码

不管是文本编辑,还是代码工具,一般都提供了用鼠标拖拽选中文字到指定地方的功能,但是在Xcode里貌似这样有点儿难,你会发现当想拖动的时候会有时候成功,但是大部分时间都是又处于选择状态.一开始我以为是Mac系统的原因,后来发现在其他地方:浏览器就可以拖动,我想这可能是Xcode里去掉了,但是有时候能拖拽是怎么回事.好吧,我不coding了,非得找出来. 废话不多说了: 点击选中的代码(文字),不要移动和松开鼠标左键,当竖线变成箭头之后就可以拖动了,其实不需要多少时间,基本上就是:不要直接点鼠标左键

弹窗拖拽组件开发应用

需要注意的问题包括: 1.this的指向到底是指向谁--弄清楚所指的对象 2.深入理解原型的概念及使用: 去改写对象下面公用的方法或者属性 , 让公用的方法或者属性在内存中存在一份 ( 提高性能) 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <

Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理

今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级.原理和之前的一样,简单吧. <style type="text/css"> #div1 { width: 100px; height: 100px; background: red; position: absolute; } #div2 { width: 400px; height: 300px; backgrou

简单弹窗拖拽

<!doctype html><!--<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前.此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范.--><html>    <head>        <!--声明当前页面的编码集:charset=gbk,gb2312(中文编码),utf-8国际编码-->        <meta http-equiv="Content-

移动端的拖拽这个demo实现的功能

SQL数据库适合那些需求确定和对数据完整性要去严格的项目.NoSQL数据库适用于那些对速度和可扩展性比较看重的那些不相关的,不确定和不断发展的需求. 总所周知,网页的加载速度跟图片是有很大的关系的,因为在不影响图片质量的情况下,减小图片的大小显得尤为重要. 这个demo实现的功能是:可以拖拽的元素(在这里是图片)位于列表中,这些元素可以被拖到指定区域,到达指定区域(控制台)后,元素被插入控制台后,原来的拖动元素返回原位置,新的元素依然可以在控制台中拖动,也能拖出控制台. 由于网页支付基于JS-S

storyboard之拖拽代码到你的工程

自己封装的组件要如何高效的保存和被下次使用呢?答案我来告诉你: 使用storyboard 的  Code Snippet(代码片段) 你也许经常看到storyboard上的这个东西,却从来没有用过这个高级的玩意儿,今天我来给大家演示一下,如何封装自定义的代码到 storyboard中去,已便下次快速的使用: 1.如何使用?: 上面已经讲到,只需要拖拽你想用的代码块(例如一个block块,一个GCD单例块,一个 FRC块)到工程即可,苹果为你提供了一些,你可能会用到的 code snippet 2

简洁易行的JS拖拽代码

var x, y var drag_ = false var D = new Function('obj', 'return document.getElementById(obj);') var IE = new Function( '', 'if(navigator.appName.indexOf("Explorer")>=0)return 1;if(navigator.appName.indexOf("Netscape")>=0)return 2'