jquery利用拖拽方式在图片上添加热链接


Posted in Javascript onNovember 24, 2015

本文实例讲述了jquery利用拖拽方式在图片上添加热链接的实现过程,分享给大家供大家参考。具体如下:
运行效果截图如下:

jquery利用拖拽方式在图片上添加热链接

项目的需求,要在一张图片上加不同的链接,比如说,图片是一个套房,里面有沙发,茶几,酒柜,电视柜等,然后在这些物件上加一个超链接,点击后打开相关产品的介绍。

用jquery写了一个在图片添加锚点的功能,实现的原理:一个文本框写入标题,一个文本框写链接,一个添加按钮,一个编辑按钮,当写好内容后点击添中添加,便会在图片的上方出现一个P标签,然后按着鼠标左键拖拽该标签放到相应的地方松开就可以了,下面来看具体代码。

首入引入jquery库

<script src="js/jquery/1.11.1/jquery.min.js"></script>

构建html。

<div class="box">
 <input type="text" name="title">
 <input type="text" name="link" value="http://">
  <input type="button" value="添加链接" id="add">
 <input type="button" value="编辑" id="show">
</div>
<div class="img_box">
 <img src="images/55cc64813c330.jpg">
</div>

写上CSS,注意这里标签的位置是相对于图片的位置的,所以图片的img_box要加上position: relative;

*{padding: 0; margin: 0;}
.box{margin: 10px;}
.img_box{position: relative;}
.img_box .maodian{position: absolute; padding: 5px 10px; border-right: 5px; background: #000; 
   filter:alpha(opacity=40); 
   -moz-opacity:0.4; 
   opacity:0.4;
   top:10px;
   left:10px;
   color:#FFF;
   font-size: 12px;
   font-family: "宋体";
   cursor: pointer;
}
.maodian a{color: #FFF; text-decoration: none;}

写上JS

$(function(){
   var obj = null ;//定义标签对象的全局变量,目的用于编辑
   $("#add").click(function(){//绑定添加按钮单击事件
    var title = $("input[name=title]").val();//取得标题内容
    var link = $("input[name=link]").val();//取得超链接
    var html = "<p class='maodian'><a href='"+link+"'>"+title+"</a></p>";组装P标签
    $(".img_box").append(html); //添加到img_box div中,即图片的后面
   });
 
   $(".img_box").delegate(".maodian","mousedown",function(e){//绑定标签鼠标按下事件
    obj = $(this);//把当前标签对象赋值给变量
    if(obj.setCapture){ //用于兼容非准浏览器
     obj.setCapture();
    }
    $("input[name=title]").val(obj.find("a").text());//把点中标签的内容加到标题文本框中
    $("input[name=link]").val(obj.find("a").attr("href"));/把点中标签的链接加到链接本框中
     var _x = e.pageX - obj.offset().left;//取得鼠标到标签左边left的距离
     var _y = e.pageY - obj.offset().top; //取得鼠标到标签顶部top的距离
     var oWidth = $(this).outerWidth(); //取得标签的宽,包括padding
     var oHeight = $(this).outerHeight();//取得标签的高,包括padding
     var x=0,y=0; 定义移动的全局变量
 
     $(".img_box").bind("mousemove",function(e){
      var img_position = $(".img_box").offset(); //取得图片的位置
      x = e.pageX -_x - img_position.left; //计算出移动的x值
      y = e.pageY -_y - img_position.top; //计算出移动的y值
      if(x<0){ //如果移动小于0,证明移到了图片外,应设为0
       x = 0;
      }else if(x>($(".img_box img").width()-oWidth)){
      //如果移动大于图片的宽度减去标签的宽度,证明移到了图片外,应该设为可用的最大值
       x = $(".img_box img").width()-oWidth;
      }
 
      if(y<0){ //同上
       y = 0;
      }else if(y>($(".img_box img").height()-oHeight)){
       y = $(".img_box img").height()-oHeight;
      }
      obj.css({"left":x,"top":y});
     });
 
     $(".img_box").bind("mouseup",function(){ //绑定鼠标左键弹起事件
      $('.img_box').unbind("mousemove"); //移动mousemove事件
      $(this).unbind("mouseup"); //移动mouseup事件
      if(obj.releaseCapture){ //兼容非标准浏览器
      obj.releaseCapture();
     }
      
     });
     return false; //用于选中文字时取消浏览器的默认事件
   });
 
   $(".img_box").delegate(".maodian","dblclick",function(){//绑定双击事件
    $(this).remove(); //删除当前标签
   })
 
   $("#show").click(function(){//绑定编辑按钮
     //更新内容到标签
    obj.find("a").text($("input[name=title]").val()).attr("href",link);
   })
  
   $(".img_box").delegate("a","click",function(){ //取消a标签的单击默认事件
    return false;
   })
 
  })

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

Javascript 相关文章推荐
日期函数扩展类Ver0.1.1
Sep 07 Javascript
JSONP 跨域共享信息
Aug 16 Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
轻松实现jquery手风琴效果
Jan 14 Javascript
js中遍历对象的属性和值的方法
Jul 27 Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 Javascript
Vue.js 中的 $watch使用方法
May 25 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
详解babel升级到7.X采坑总结
May 12 Javascript
ES6小技巧之代替lodash
Jun 07 Javascript
Vue.js数字输入框组件使用方法详解
Oct 19 Javascript
jquery中checkbox使用方法简单实例演示
Nov 24 #Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 #Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
Nov 24 #Javascript
基于jquery实现简单的手风琴特效
Nov 24 #Javascript
jQuery插件实现无缝滚动特效
Nov 24 #Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 #Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 #Javascript
You might like
谈一谈收音机的高放电路
2021/03/02 无线电
php 保留小数点
2009/04/21 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php常用字符函数实例小结
2016/12/29 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
玩转方法:call和apply
2014/05/08 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
BootStrap中
2016/12/10 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
python简单读取大文件的方法
2016/07/01 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
Django实现文件上传和下载功能
2019/10/06 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
PHP面试题大全
2015/10/16 面试题
项目副经理岗位职责
2013/12/30 职场文书
我的求职计划书
2014/01/10 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
公司借款担保书
2015/09/22 职场文书
canvas多重阴影发光效果实现
2021/04/20 Javascript
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
MySQL创建管理子分区
2022/04/13 MySQL