簡體   English   中英

jQuery Mousemove:在坐標處將事件拋出到另一個元素中

[英]jQuery Mousemove: throw event into another element at coordinates

如何保持/廣播一個元素到另一個元素的鼠標移動(具有嚴格的坐標)? 請注意,當觸發生成的 jQuery .mousemove()時, DIV B的縮放效果應起作用。 有關更多上下文,請參見代碼段或此小提琴中的代碼。

 // Code by Magnify JS maintained by thdoan // http://thdoan.github.io/magnify/ // https://github.com/thdoan var native_width = 0; var native_height = 0; //Now the mousemove function $(".magnify").mousemove(function(e) { //When the user hovers on the image, the script will first calculate //the native dimensions if they don't exist. Only after the native dimensions //are available, the script will show the zoomed version. if (!native_width && !native_height) { //This will create a new image object with the same image as that in .small //We cannot directly get the dimensions from .small because of the //width specified to 200px in the html. To get the actual dimensions we have //created this image object. var image_object = new Image(); image_object.src = $(".small").attr("src"); //This code is wrapped in the .load function which is important. //width and height of the object would return 0 if accessed before //the image gets loaded. native_width = image_object.width; native_height = image_object.height; } else { //x/y coordinates of the mouse //This is the position of .magnify with respect to the document. var magnify_offset = $(this).offset(); //We will deduct the positions of .magnify from the mouse positions with //respect to the document to get the mouse positions with respect to the //container(.magnify) var mx = e.pageX - magnify_offset.left; var my = e.pageY - magnify_offset.top; //Finally the code to fade out the glass if the mouse is outside the container if (mx < $(this).width() && my < $(this).height() && mx > 0 && my > 0) { $(".large").fadeIn(100); } else { $(".large").fadeOut(100); } if ($(".large").is(":visible")) { //The background position of .large will be changed according to the position //of the mouse over the .small image. So we will get the ratio of the pixel //under the mouse pointer with respect to the image and use that to position the //large image inside the magnifying glass var rx = Math.round(mx / $(".small").width() * native_width - $(".large").width() / 2) * -1; var ry = Math.round(my / $(".small").height() * native_height - $(".large").height() / 2) * -1; var bgp = rx + "px " + ry + "px"; //Time to move the magnifying glass with the mouse var px = mx - $(".large").width() / 2; var py = my - $(".large").height() / 2; //Now the glass moves with the mouse //The logic is to deduct half of the glass's width and height from the //mouse coordinates to place it with its center at the mouse coordinates //If you hover on the image now, you should see the magnifying glass in action $(".large").css({ left: px, top: py, backgroundPosition: bgp }); } } }); //http://stackoverflow.com/a/26782439/5076162 - Arun P Johny $(document).on('mousemove', function(e) { var event = $.Event('myevent', { pageX: e.pageX, pageY: e.pageY }); $(document).trigger(event); }); $(document).on('myevent', function(e) { log(e.pageX + ':' + e.pageY) }); var log = function(message) { var $log = $('#log'); $log.html(message) }; 
 /*Some CSS*/ * { margin: 0; padding: 0; } .magnify { width: 658px; margin: 50px auto; position: relative; } /*Lets create the magnifying glass*/ .large { width: 175px; height: 175px; position: absolute; border-radius: 100%; /*Multiple box shadows to achieve the glass effect*/ box-shadow: 0 0 0 7px rgba(255, 255, 255, 0.85), 0 0 7px 7px rgba(0, 0, 0, 0.25), inset 0 0 40px 2px rgba(0, 0, 0, 0.25); /*Lets load up the large image first*/ background: url('https://s.rrimr.com/SPSSMR/ImageCache/ImageCache.aspx?Project=S1910683&File=B10_COLOR_IMG_FANCY.jpg') no-repeat; /*hide the glass by default*/ display: none; } /*To solve overlap bug at the edges during magnification*/ .small { display: block; } .throwMouse { width: 658px; height: 208px; display: block; background-color: #000; font-family: arial; margin: 0 auto; padding: 0; color: #FFF; vertical-align: middle; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <!-- Lets make a simple image magnifier --> <div class="throwMouse"> <h3> DIV A: </h3> Throw this element's mousemove events INTO the .catchMouse element and have it behave as though the mouse were hovering over it. </div> <div class="magnify catchMouse"> <!-- This is the magnifying glass which will contain the original/large version --> <div class="large"></div> <!-- This is the small image --> <h3> DIV B: </h3> <img class="small" src="https://s.rrimr.com/SPSSMR/ImageCache/ImageCache.aspx?Project=S1910683&File=B10_COLOR_IMG_FANCY.jpg" width="658" /> </div> <div id='log'> </div> 

你可以試試這個

我們的想法是,當鼠標滑過.throwMouse DIV我們模擬上的鼠標懸停事件.magnify格,所以我們需要調整鼠標是200像素下來是對DIV

$('.throwMouse').on('mousemove', function(e) {
      var event = $.Event('myevent', {
        pageX: e.pageX,
        pageY: e.pageY + 200
      });
      $(".magnify").trigger(event);

    });

然后,在舊事件mouseover旁邊的.magnify div上為創建的事件myevent添加事件偵聽器

$(".magnify").on('mousemove myevent', function(e) { //});

您可以通過檢查event.target來檢查哪個div是事件的目標

if($(event.target).hasClass('throwMouse')){
 //do something specific for this div
}

 // Code by Magnify JS maintained by thdoan // http://thdoan.github.io/magnify/ // https://github.com/thdoan var native_width = 0; var native_height = 0; //Now the mousemove function $(".magnify").on('mousemove myevent', function(e) { //When the user hovers on the image, the script will first calculate //the native dimensions if they don't exist. Only after the native dimensions //are available, the script will show the zoomed version. if (!native_width && !native_height) { //This will create a new image object with the same image as that in .small //We cannot directly get the dimensions from .small because of the //width specified to 200px in the html. To get the actual dimensions we have //created this image object. var image_object = new Image(); image_object.src = $(".small").attr("src"); //This code is wrapped in the .load function which is important. //width and height of the object would return 0 if accessed before //the image gets loaded. native_width = image_object.width; native_height = image_object.height; } else { //x/y coordinates of the mouse //This is the position of .magnify with respect to the document. var magnify_offset = $(this).offset(); //We will deduct the positions of .magnify from the mouse positions with //respect to the document to get the mouse positions with respect to the //container(.magnify) var mx = e.pageX - magnify_offset.left; var my = e.pageY - magnify_offset.top; //Finally the code to fade out the glass if the mouse is outside the container if (mx < $(this).width() && my < $(this).height() && mx > 0 && my > 0) { $(".large").fadeIn(100); } else { $(".large").fadeOut(100); } if ($(".large").is(":visible")) { //The background position of .large will be changed according to the position //of the mouse over the .small image. So we will get the ratio of the pixel //under the mouse pointer with respect to the image and use that to position the //large image inside the magnifying glass var rx = Math.round(mx / $(".small").width() * native_width - $(".large").width() / 2) * -1; var ry = Math.round(my / $(".small").height() * native_height - $(".large").height() / 2) * -1; var bgp = rx + "px " + ry + "px"; //Time to move the magnifying glass with the mouse var px = mx - $(".large").width() / 2; var py = my - $(".large").height() / 2; //Now the glass moves with the mouse //The logic is to deduct half of the glass's width and height from the //mouse coordinates to place it with its center at the mouse coordinates //If the mouse is on the div A make the .large DIV up a 100px. if($(event.target).hasClass('throwMouse')){ py -= 100; } //If you hover on the image now, you should see the magnifying glass in action $(".large").css({ left: px, top: py, backgroundPosition: bgp }); } } }); //http://stackoverflow.com/a/26782439/5076162 - Arun P Johny $('.throwMouse').on('mousemove', function(e) { var event = $.Event('myevent', { pageX: e.pageX, pageY: e.pageY + 200 }); $(".magnify").trigger(event); }); $(document).on('myevent', function(e) { log(e.pageX + ':' + e.pageY) //$(".magnify").mouse }); var log = function(message) { var $log = $('#log'); $log.html(message) }; 
 /*Some CSS*/ * { margin: 0; padding: 0; } .magnify { width: 658px; margin: 50px auto; position: relative; } /*Lets create the magnifying glass*/ .large { width: 175px; height: 175px; position: absolute; border-radius: 100%; /*Multiple box shadows to achieve the glass effect*/ box-shadow: 0 0 0 7px rgba(255, 255, 255, 0.85), 0 0 7px 7px rgba(0, 0, 0, 0.25), inset 0 0 40px 2px rgba(0, 0, 0, 0.25); /*Lets load up the large image first*/ background: url('https://s.rrimr.com/SPSSMR/ImageCache/ImageCache.aspx?Project=S1910683&File=B10_COLOR_IMG_FANCY.jpg') no-repeat; /*hide the glass by default*/ display: none; } /*To solve overlap bug at the edges during magnification*/ .small { display: block; } .throwMouse { width: 658px; height: 208px; display: block; background-color: #000; font-family: arial; margin: 0 auto; padding: 0; color: #FFF; vertical-align: middle; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <!-- Lets make a simple image magnifier --> <div class="throwMouse"> <h3> DIV A: </h3> Throw this element's mousemove events INTO the .catchMouse element and have it behave as though the mouse were hovering over it. </div> <div class="magnify catchMouse"> <!-- This is the magnifying glass which will contain the original/large version --> <div class="large"></div> <!-- This is the small image --> <h3> DIV B: </h3> <img class="small" src="https://s.rrimr.com/SPSSMR/ImageCache/ImageCache.aspx?Project=S1910683&File=B10_COLOR_IMG_FANCY.jpg" width="658" /> </div> <div id='log'> </div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM