jquery实现一些小动画二

jquery实现拖拽功能

 <!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="./reset.css">
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<style>
html,body{
width:100%;
height:100%;
}
.dialogmark{
position:fixed;
top:0;
left:0;
z-index:1000;
width:100%;
height:100%;
background: rgba(0,0,0,0.3);
}
.dialogbox{
position:fixed;
width:300px;
height:400px;
z-index: 1001;
background:#fff;
overflow:hidden;
}
.dialogbox h3.title{
height:35px;
line-height:35px;
padding: 0 10px;
background: #DDD;
cursor: move;
position: relative;
user-select: none;
}
.dialogbox h3 i {
position: absolute;
top:50%;
right: 10px;
margin-top: -10px;
width: 20px;
height: 20px;
font-size: 16px;
line-height: 20px;
text-align: center;
font-style: normal;
cursor: pointer;
}
</style>
</head>
<body>
<div class="dialogmark"></div>
<div class="dialogbox">
<h3 class="title">
标题
<i>X</i>
</h3>
<div class="content">
</div>
</div>
<script>
$(function(){ /*
拖拽的js实现
*/
var $dialogmark = $(".dialogmark"),
$dialogbox = $(".dialogbox"),
$h1 = $dialogbox.children('.title'),
$i = $h1.children('i'),
HW = $("body").innerWidth(),
HH = $("body").innerHeight(),
boxW = $dialogbox.outerWidth(),
boxH = $dialogbox.outerHeight(); $i.click(function(){
$dialogbox.hide(300)
}) //计算盒子位置
var calPosition = function(){
//获取当前窗口的大小
$dialogbox.css({
top:(HH - boxH)/2,
left:(HW - boxW)/2
})
}
calPosition()
var dragstart = function(event){
var mX = event.clientX, //获取原始鼠标位置X位置
mY = event.clientY, //获取原始鼠标位置Y位置
boxSX = $dialogbox.position().left,
boxSY =$dialogbox.position().top;
//这里可以利用传递参数,也可以给元素赋值自定义属性保存变量值
$(document).on("mousemove",{mX,mY,boxSX,boxSY},dragmove)
}
var dragmove = function(event){
var {mX,mY,boxSX,boxSY}= event.data,
mMX = event.clientX, //移动鼠标的当前X位置
mMY = event.clientY, //移动鼠标的当前Y位置
mcX = mMX - mX, //鼠标改变X位置
mcY = mMY - mY, //鼠标改变Y位置
boxcX = boxSX + mcX, //盒子需要改变的X位置
boxcY = boxSY + mcY, //盒子需要改变的Y位置
minL = 0, //盒子最小移动X距离
minT = 0, //盒子最小移动Y距离
maxL = HW - boxW,//盒子最大移动X距离
maxT = HH - boxH;//盒子最大移动Y距离 boxcX = boxcX < minL?minL:(boxcX>maxL?maxL:boxcX) //X边界判断
boxcY = boxcY < minT?minT:(boxcY>maxT?maxT:boxcY) //Y边界判断
$dialogbox.css({
left:boxcX,
top:boxcY
})
}
var dragend = function(){
//快速拖拽存在鼠标丢失焦点问题
$(document).off("mousemove",dragmove)
}
$h1.mousedown(dragstart)
$(document).mouseup(dragend)
})

效果图:

  

注意:

  拖拽中存在的问题:    

    在拖拽中存在一个问题,就是如果鼠标拖拽过快,盒子是需要计算罪行位置的,但是
    计算速度跟不上鼠标的移动速度,导致鼠标离开了盒子,那么此时鼠标的任何事件都与盒子
    无关了,即鼠标抬起不会触发接触绑定事件,鼠标移动也不会触发定义在盒子的鼠标移动事件

  解决思路:   

    1、使用setCapture与releaseCapture方法。注意google浏览器不支持这两个方法

     将鼠标与当前元素绑在一起,无论你移动多快,我都绑定在一起
       this.setCapture()
     将鼠标与当前元素解绑。与setCapture相反
       this.releaseCapture()
     2、鼠标移动在快也脱离不了document即当前文档,因此,
       我们可以给document绑定mousemove方法,那么鼠标在文档中移动都会触发mosemove绑定的事件
        注意:重新绑定document时,存在this指向(如果原本用了this)问题(解决思路:使用bind方法)

jquery实现一些小动画二的更多相关文章

  1. jquery实现一些小动画一

    jquery实现小动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. WPF之小动画二

    上一篇文章简单介绍了动画的定义方法和一些控制动画的方法,并没有涉及复杂属性的动画处理方式,本文将继续动画的其它方面的使用. 写在前面(对于一些动画操作时候的建议): 1.如果希望某个元素从显示到消失, ...

  3. 利用jQuery实现用户名片小动画

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.下面给大家介绍利用jQuery实现的小动画,非常的简便,如果有原生js操作的话,那么就不止这么多行了.至于CSS,个人觉得,这边CSS布局也蛮重 ...

  4. 用jquery实现抽奖小程序

    用jquery实现抽奖小程序 这些日子,到处都可以看到关于微信小程序的新闻或报到,在博客园中写关于微信小程序的也不少.但是今天我要说的不是微信小程序,而是用简单的jquery写的一个好玩的抽奖小程序. ...

  5. 关于JQuery(最后一点动画效果*)

    1,$(':radio').val(['1','2','3']);//特殊写法,把值为1 2 3的都选中. 2,math.abs(len)取绝对值 3,按钮高亮显示,一般是配置两个按钮,一个普通的,一 ...

  6. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  7. 如何制作网页小动画?——gif or png

    一.场景与动画 为了拉动网站氛围,或者吸引用户浏览焦点,需要使用一些小动画.这种动画不是(gif)单纯的重复,而是需要需要一些控制和交互,比如在动画完成后打开一个对话框.动画有几个基本要素(时间控制, ...

  8. jquery IE6 下animate 动画的opacity无效

    jquery IE6 下animate 动画的opacity无效,其实是有效的,因为IETester的一个小BUG 原生IE6 没问题...呵呵~~

  9. js、jQuery实现2048小游戏

    2048小游戏 一.游戏简介:  2048是一款休闲益智类的数字叠加小游戏 二. 游戏玩法: 在4*4的16宫格中,您可以选择上.下.左.右四个方向进行操作,数字会按方向移动,相邻的两个数字相同就会合 ...

随机推荐

  1. JDK、JVM、JRE关系

    开始第一个Java程序 *保证计算机当中已经安装了文本编辑器EditPlus *安装JDK[JDK一般需要从oracle的官网下载],我们这里先用的JDK7 *在安装JDK的时候有jre JDK开发需 ...

  2. 自定义vue的loading插件

    在一般的vue项目中,都会用到Loading或者Alert之类的弹窗浮层,而他们是一种比较高频率出现的组件. 一般情况下,我们都会去直接import该组件,然后直接以标签的形式引用进去当前页面组件中, ...

  3. Centos 7 编译安装mariadb 5.5

    一.环境 OS :Linux 3.10.0-693.el7.x86_64 mariadb下载地址: ]# wget https://downloads.mariadb.org/interstitial ...

  4. LeetCode 动态规划

    动态规划:适用于子问题不是独立的情况,也就是各子问题包含子子问题,若用分治算法,则会做很多不必要的工作,重复的求解子问题,动态规划对每个子子问题,只求解一次将其结果保存在一张表中,从而避免重复计算. ...

  5. luoguP2597 [ZJOI2012]灾难

    题意 这题思路好奇怪啊 见到有向无环图显然是要拓朴排序,不妨按照被吃向吃连边,那么\(x\)灭绝当且仅当x的入点都灭绝,于是考虑怎样x的入点都灭绝 比如4号节点,它灭绝当且仅当2和3灭绝,2和3灭绝当 ...

  6. 安装Ubuntu时出现Intel VT-X没有开启

    试了很多种方法,最后原来是只需要进入bosi系统,然后进入Intel Virtual Technology 使之成为Enabled即可,就这么简单粗暴.

  7. Tomcat配置https访问

    1.利用JDK自带的keytools生成一个p12类型的证书 keytool -genkey -storetype PKCS12 -alias tomcat -keyalg RSA -keysize ...

  8. Python连载18-closure闭包解释及其注意点

    一.闭包 1.定义:当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,当内部函数被当做返回值的时候,相关参数和变量保存在返回的函数之中,这种结果,叫做闭包. 2.例子:连载17中 ...

  9. 用Maven整合SSM框架

    前述 Maven 是专门用于构建和管理Java相关项目的工具,利用 Maven 的主要目的是统一维护 jar 包.关于 Maven 的安装在这篇里面就不说了. SSM(Spring+SpringMVC ...

  10. 【转】asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...