开发者

Calculate how much bigger image A is from image B

Some math calculations in JS problem solving

I am working on a zoom image functionality that creates a new div with a large image that is moved through x and y according to the mousemove on the image.

The large image should move a certain %, which is what i am trying to figure out. How much should it move by.开发者_StackOverflow

Here is some info:

  • The small image is always the same size and its square. (it is actually always 221px X 221px)
  • The large image varies (also always square, can be any size like 1000x1000)
  • The view port of the zoomer is always the same.

I want to calculate how much smaller (or vice-versa ) the small image is from the the large.

This is in middle of a whole big script. I started writing the formula for the calculation: Again, All i want is to get the difference in percent converted into pixels step by step. First get the % then convert that into pixels.

    zoomObj.caluculateSizes = function(){
        $(zoomObj.largeImage).load(function(){
            // zoomObj.callingEvent is the small image
           zoomObj.smlImgSize = zoomObj.callingEvent.width()
           zoomObj.lrgImgSize = zoomObj.largeImage.width()

           // How do i go from here?
    })

js goes on.......


This is just bit of simple math...

w - width of the small image
W - width of the big image
l - left position of the small image
L - left position of the big image

L = l + 1/2w - 1/2W

h - height of the small image
H - height of the big image
t - top position of the small image
T - top position of the big image

T = t + 1/2h - 1/2H

So assuming our image is:

<img style="width:221px; height:221px; position:absolute; left:600px; top:700px;" />

Answer:

Left = 600 + 1/2*221 - 1/2*1000 = 210 (rounded)
Top = 700 + 1/2*221 - 1/2*1000 = 310 (rounded)

<img style="width:1000px; height:1000px; position:absolute; left:210px; top:310px;" />

Using this calculation you can determine where you need to place big image/div to be centred in relation to the other object.


Edit: To put it all together, assuming bigImage is a CHILD of viewport, you need to use 0 as t and 0 as l.

Left = 0 + 1/2*221 - 1/2*1000 = -390 (rounded)
Top = 0 + 1/2*221 - 1/2*1000 = -390 (rounded)

<div id="viewport" style="width:221px; height:221px;overflow:hidden;position:relative;">
    <img id="bigImage" style="width:1000px; height:1000px; position:absolute; left:-390px; top:-390px;" />
</div>

- as you see I used negative values, so bigImage will hide behind the viewport, and because.


Unless I am mistaken this is more a mathematical question than a jQuery one. To get the percentage, divide one by the other and multiply by 100.

So, to get the with of the small image as a percentage of the width of the big image:

var smallImgWidthPercentage = parseFloat(zoomObj.callingEvent.width() / zoomObj.largeImage.width()) * 100;

Although, if your image is square, then you only need to work out one value.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜